Victory moved them to within a point of their fourth straight league crown on an incident-packed night that saw 27 goals scored in eight matches.
Massimiliano Allegri’s leaders could have sealed the title had second-placed Lazio failed to beat Parma, but Stefano Pioli’s side struck three times through Marco Parolo, Miroslav Klose and Antonio Candreva in six blistering first half minutes and added a fourth through Balde Keita with nine minutes to go to both keep the gap between themselves and Juve at 14 points with five to play and relegate bankrupt Parma.
Juve now need just a draw at Sampdoria on Saturday night to win the league before Tuesday night’s Champions League semi-final clash with Real Madrid in Turin.
“At this point it would have to be a sort of backwards miracle for us to lose the title from here. Let’s hope we get the point and then we can talk about those two huge games.” said Allegri, looking ahead to the Real Madrid matches.
“Real have so much technical ability that if you don’t play perfectly, and if you don’t cause them harm when you have the ball, the chances of going to the final are much lower.”
His side will need to be sharper against Madrid, as they struggled at times against Fiorentina and could consider themselves fortunate to draw level after Andrea Pirlo’s clumsy 31st-minute trip on Joaquin allowed Gonzalo Rodriguez to give Vincenzo Montella’s side a shock lead from the penalty spot.
Only two minutes after going behind referee Luca Banti gave a free-kick for what appeared to be a non-existent foul on Stefano Sturaro by Fiorentina goalkeeper Neto, who was nonetheless booked.
Pirlo took the opportunity to redeem himself for his earlier error by clipping in a perfect cross into the area, from which Fernando Llorente headed in the equaliser.
They took the lead right on the stroke of half-time when Serie A top scorer Tevez met Patrice Evra’s drilled cross from the left wing with a perfectly timed looping header back across Neto.
Fiorentina came out fighting at the start of the second half and should have levelled when Joaquin was brought down in the box again in the 65th minute, this time by Giorgio Chiellini, only for Rodriguez to smash his penalty well wide.
Tevez punished the visitors five minutes later when he raced on to Claudio Marchisio’s through ball and smashed his 20th goal of the season across Neto. Illicic curled home a wonderful free-kick in the last minute, but it was too little too late.
Filippo Inzaghi looks set to be sacked by AC Milan after they were hammered 3-1 by Genoa, who won away at Milan for the first time in 57 years.
Seven-times European champions Milan are stuck in 10th place, and Inzaghi, who was an idol for the fans when he played up front for them from 2001-12, looks resigned to his fate after a thoroughly mediocre season. His team were jeered off at the end of the game by the few fans who bothered to turn up.
“Milan is in my heart and it always will be. Let’s see what the club thinks and we’ll see tomorrow,” said a distraught looking Inzaghi.
“I never give up, and I was the same as a player. I can hold my head high because I’ve given everything. The club will make their decision now.”
Lazio’s win saw them keep second place and their one-point lead on local rivals Roma, who walloped Sassuolo 3-0.
Roma are five points ahead of fourth-placed Napoli, who take on Empoli on Thursday evening, in the battle for a Champions League spot next season.
“I’m glad not only that we won but that we managed to play so well,” said Roma coach Rudi Garcia.
“We were very effective. I won’t congratulate the guys because we have a game on Sunday and we need to get three points again.”