At the start of a crucial week in which Juve also face in-form Atalanta, the leaders had been boosted ahead of kick-off by news of another defeat for second-placed Lazio.
However, the Bianconeri could not take full advantage despite a sensational opener from Adrien Rabiot and Cristiano Ronaldo’s swift second.
All six goals came after the interval as Milan staged a rapid recovery, scoring through Zlatan Ibrahimovic from the penalty spot, Franck Kessie, substitute Rafael Leao and Ante Rebic.
Missing the suspended Paulo Dybala, Maurizio Sarri’s side could not rally and so remain seven points ahead of Lazio, while rampant Milan climb to fifth.
Few could have imagined such a chaotic second period when an offside flag against Ibrahimovic ensured the sides went into the break scoreless after a first half of precious little action.
But Rabiot then required only 74 seconds from the kick-off to break the deadlock in magnificent fashion.
The midfielder collected the ball just inside his own half and brushed off Kessie before advancing, nutmegging Theo Hernandez and then, 20 yards from goal, arrowing a left-footed shot into the top-right corner.
There was little the Milan defence could do to deny Rabiot, but Alessio Romagnoli and Simon Kjaer would be well advised to avoid replays of Juve’s second, the pair colliding to give Ronaldo time and space to beat Gianluigi Donnarumma.
Just as Juve looked set to coast to victory, a VAR review spotted a handball from Leonardo Bonucci inside the area, allowing Ibrahimovic to convert from 12 yards.
The momentum swung and suddenly Milan were in the ascendancy. A wonderful team move created space for Kessie to shoot inside the area, a deflection deceiving Wojciech Szczesny, while Leao drove a low strike through the goalkeeper for a third goal in six minutes to turn the match around.
Juve threatened to battle back as Donnarumma saved superbly from Daniele Rugani, but Rebic – earlier denied by Szczesny – lashed in Milan’s fourth to clinch the points. Ronaldo thought he had netted again in stoppage time, only to be ruled offside.
What does it mean? Title tussle still on
The Scudetto race appeared to have been run with an hour played. Juve were 2-0 up, having seemingly dealt with the absence of key man Dybala, and heading for a double-digit lead at the summit.
But Milan, who so harmed Lazio’s title bid last weekend with a 3-0 triumph, were determined to influence another twist in the tale, roaring back in astonishing fashion.
Rebic gets his revenge
Rebic has found his feet in 2020, netting 10 times since the turn of the year heading into Tuesday’s match. His low point, however, had been a red card at Juve in the Coppa Italia that contributed to a semi-final exit.
The forward was in top form against the Bianconeri this time, though, winning the penalty with a flick onto Bonucci’s arm – picking up a booking for his pre-VAR review protests in the process – before teeing up Leao’s goal and then netting the fourth himself.
Poor Rabiot. The former Paris Saint-Germain midfielder will likely never top his outrageous opener, yet this game will not be remembered for a brief period of glorious attacking flair.
Instead, the focus will rest on the spectacular fashion in which Sarri’s side imploded. The penalty call was perhaps harsh, but one of Europe’s sturdiest defences – admittedly missing Matthijs de Ligt – lost all composure and subsequently all three points.
Key Opta Facts
– Milan have scored four Serie A goals against Juventus for their first time since March 1989 (4-0).
– Prior to this match, the last time Juventus lost a Serie A game after leading by a two-goal margin was in October 2013, against Fiorentina.
– Milan have won a Serie A match after going two goals behind for the first time since October 2016 (4-3 against Sassuolo).
– The Rossoneri have scored two goals in five consecutive Serie A games for their first time since January 2013.
– Rebic has both scored and delivered an assist in the same match for the first time in Serie A.
Both sides face significant tests this weekend. Milan are at Napoli on Sunday, 24 hours after Juve host Atalanta. Sarri will have to hope there is no hangover.