Norwegian Jens Petter Hauge started for the first time this season, as Milan recalled Samu Castillejo and Theo Hernandez as well. Juve however brought back Adrien Rabiot and Gianluca Frabotta.
Juventus had the first sight towards the opener when Paulo Dybala leaned to the far side of the area to fire in a shot, but Gianluigi Donnarumma saved comfortably.
The Bianconeri had another go a few moments later when a loose ball from a corner-kick landed onto Federico Chiesa who after controlling, hit the face of the post.
Chiesa's decisiveness came through towards the midway point after he ran behind the defence to send in a low finish following a flick on from Dybala.
Milan clawed themselves level in the remaining four minutes of the first half from a cross on the left by Rafael Leao which found an on-coming Davide Calabria, who nestled the top corner.
Diogo Dalot had the Bianconeri on the edge minutes in the second half after his low shot from range forced Wojciech Szczesny to scramble across and parry for a corner-kick.
The Old Lady regained the lead on 61 minutes as Chiesa dropped a shoulder on the far side of the area before curling into the bottom-corner.
It was to be the two-goal hero's final contribution, as he made way for Dejan Kulusevski with Weston McKennie introduced for Dybala.
McKennie handed Juventus a third goal inside the last 15 minutes after he pounced on a square pass from Kulusevski to fire in from close-range to wrap up the win for the visitors.