Juve have 84 points with Napoli on 78 followed by Lazio and AS Roma, who were meeting in their derby in the late kickoff, on 60.
Donnarumma, who became Milan’s first-choice goalkeeper at the age of 16, was making his 100th Serie A appearance at 19 years and 49 days and his save from Napoli substitute Arkadiusz Milik must rank among his finest so far.
Milik seemed certain to score when Lorenzo Insigne’s header found him alone in front of goal but Donnarumma showed extraordinary reflexes to turn his low shot around the foot of the post.
Napoli produced their usual slick passing and pinned Milan in their own half for long periods but lacked imagination in the final third.
Sixth-placed Milan had a goal by Mateo Musacchio ruled out for offside in the first half.
"It was an extraordinary save by an extraordinary goalkeeper," said Napoli coach Maurizio Sarri. "The team is doing what it has to do, at the moment we are less brilliant in attack but it was still a good performance."
Juve, who wiped out a 3-0 first leg deficit against Real Wednesday only to lose to a stoppage time penalty, went ahead on the stroke of halftime when Mario Mandzukic volleyed home Costa’s cross.
The Brazilian winger, who had replaced the injured Miralem Pjanic two minutes earlier, also provided the cross for Benedikt Hoewedes to head the second on the hour, then went on a brilliant solo run to set up the third for Sami Khedira.
Benevento forward Cheick Diabate notched his third successive brace in a 2-2 draw at Sassuolo.
Diabate, on loan from Turkish side Osmanlispor, put Benevento ahead in the 22nd minute.
Matteo Politano scored twice to put Sassuolo in front before Diabate turned in Danilo Cataldi’s cross to give Benevento their first away point of the season, although they stayed 11 points adrift at the bottom.
Fiorentina’s run of six successive wins ended in a 0-0 draw at home to SPAL who are 17th with 28 points, just above the drop zone.
Bologna’s Adam Nagy, 22, scored his first-ever professional goal in a 2-0 win over Verona. ---Reuters