Gonzalo Higuain missed a penalty after Mattia De Sciglio's red but the Argentine netted during a six-minute spell that also featured goals from Marek Hamsik and Manolo Gabbiadini
After a frustrating 70 minutes the hosts netted three times in six minutes to secure all three points and re-establish their seven-point advantage over Fiorentina.
Milan were left with a tough task after Mattia De Sciglio was sent off inside the opening minute, the defender bringing down Marek Hamsik for a penalty that was saved by Diego Lopez.
Napoli dominated possession thereafter but found Milan's makeshift back four in resolute form, until captain Hamsik finally broke their resistance with a well-placed finish.
His 70th-minute strike opened the floodgates and both Gonzalo Higuain and Manolo Gabbiadini found the net as Milan's previous hard work proved to be in vain.
Victory keeps Napoli in the hunt for a top-three finish, while a third successive defeat for Milan places more pressure on the future of Filippo Inzaghi.
Milan's head coach - already without the suspended Jeremy Menez – was not helped by his side's horrendous start, which saw De Sciglio haul down Hamsik in the penalty area after 43 seconds.
The defender was shown a red card, but when Higuain eventually took the penalty two minutes later Lopez got down well to his right to keep his side level.
Being a man down seemed to galvanise Milan, and they reorganised themselves well to frustrate Napoli, while attacking on the counter.
Keisuke Honda and Giacomo Bonaventura led the charge for the visitors, the latter stinging the palms of Mariano Andujar with a 20-yard drive.
Milan's sporadic attacks were encompassed by large swathes of Napoli possession, but opportunities to stretch Lopez were few and far between as the final pass was often intercepted.
Napoli should have been punished after 38 minutes as Bonaventura rose unmarked in the penalty area, but his header shaved the outside of the post with Andujar a mere spectator.
With the words of Rafael Benitez serving as encouragement, the hosts started the second half with increased intensity and should have profited as Jose Callejon and substitute Gabbiadini both went close.
The deadlock was finally broken with 70 minutes on the clock as Milan's defence failed - for the first time - to deal with a cross into the penalty area and Hamsik latched onto the loose ball to net his seventh of the season.
Higuain doubled the lead four minutes later with an emphatic finish from 12 yards, the striker collecting a low cross from Dries Mertens before beating Lopez.
Milan's fate was then sealed as a rampant Napoli broke down the left again. On this occasion the cross missed Higuain, but Gabbiadini's cute flick ensured the ball nestled in the net.
Mertens was denied a fourth by a superb fingertip save from Lopez, but it mattered little for Napoli, who were able to take their foot off the gas in the closing minutes ahead of their Europa League semi-final with Dnipro on Thursday.