Fiorentina coach Delio Rossi was fired after attacking central midfielder Adem Ljajic during his side's 2-2 draw with Novara .
The confrontation took place after Rossi substituted Ljajic with 32 minutes gone and Fiorentina were 2-0 down.
Milan beat in-form Atalanta thanks to a ninth-minute goal from Sulley Muntari and Robinho's injury-time strike to close the gap with two matches remaining.
Juve could have wrapped up the title if results had gone their way and were looking good for three points almost from the start of their match with third-bottom Lecce .
They took the lead after eight minutes through Claudio Marchisio and dominated the play, creating several chances that went begging.
It looked like the win would be theirs until Buffon miscontrolled the ball under no pressure, giving it straight to Andrea Bertolacci who slotted into an open goal five minutes from time.
"Five minutes from the end, the championship appeared to be over... then Lecce scored and in the final minutes it felt like being at the theatre awaiting the end of an opera,' said Milan coach Massimiliano Allegri, with a huge grin.
"I'm enjoying myself lots, and now we go into the derby fired up. The title is still in Juve's hands, but having it all to play for on the final day wouldn't be bad."
Milan next face Inter Milan on Sunday in what promises to be a huge derby with the Nerazzurri fighting for a place in the Champions League. Juve take on Cagliari in a game being played in Trieste because of problems at the Sardinians' stadium.
Lecce, who had Juan Guillermo Cuadrado sent off on 54 minutes, are three behind Genoa in safety after their relegation rivals beat Cagliari 2-1 in a match held behind closed doors in Brescia because of previous fan trouble.
Fiorentina took a big step towards safety coming from 2-0 down to draw 2-2 at home with Novara , who were relegated to Serie B as a result after just a season in the top flight.
Inter slumped to a 3-1 defeat at Parma , missing the chance to go level on points with third-placed Napoli and Udinese , who beat relegated bottom side Cesena 1-0.
Third spot is worth a place in the Champions League play-offs while fourth this term is only good enough for the Europa League.
Lazio , two behind Napoli and Udinese but a point above Inter, only managed a 1-1 draw at home to Siena who secured their Serie A status for next term.