Chievo and Udinese drew 2-2 after both scored in the last two minutes and Torino beat Bologna 1-0.
Milan slumped to their sixth defeat in 12 games, this time at home to an impressive Fiorentina who took the lead through Alberto Aquilani in the 10th minute.
Injury-plagued Pato, who scored his first goal for Milan in 11 months against Malaga on Tuesday, fired a penalty high over the crossbar, then Borja Valero added a second before the break with an individual effort.
Giampaolo Pazzini pulled one back from close range but, undeterred, Fiorentina hit the post before Mounir El Hamdaoui completed the scoring to keep them fourth with 24 points and Milan a poor 13th with 14.
Napoli trailed 2-1 at Genoa before Edinson Cavani rounded Sebastien Frey to level with 11 minutes left with the Uruguay forward's eighth goal of the season.
Marek Hamsik, who provided the pass for Cavani's goal, headed them in front in the 90th minute and Lorenzo Insigne completed the scoring with a breakaway goal deep into stoppage time.