Goals from Aleks Kolarov had put the champions firmly in the driving seat, but Villa fought back to level with two second-half goals appearing to have earned the visitors an unlikely point.
But sub Fernandinho scrambled home an 89th-minute winner to send the Blues back up to second in the table - if only for a few hours
Tim Sherwood’s in-form side are a side shaped in their manager’s image – full of enthusiasm, brash and full of optimism.
Results in the earlier kick-offs had largely gone against Villa and they started the game just two points outside the relegation zone so thoughts of the FA Cup final against Arsenal needed to be put on the back-burners with bigger fish still to fry.
City, looking to record a fifth successive Premier League home win and end the campaign strongly, kept the same starting eleven that beat West Ham so comfortably last weekend
...City 3 Villa 2...
There was more than a hint of after the Lord Mayor’s show in the opening moments of the game by Villa with mis-placed sloppy passing and defending that was inviting trouble.
The Blues had already come close to punishing the passing between Brad Guzan and his full-backs and with just three minutes on the clock, City were gifted the lead.
Guzan received the ball under no immediate pressure, but his attempt at playing a pass across the box went horribly wrong as he instead rolled it towards the lurking Sergio Aguero who had the simple task than rolling the ball into the empty net for his 27th of the campaign.
So shaky were the visitors by this point that another quick goal could have opened the floodgates, but Aguero and David Silva both missed presentable chances and Villa were, for the moment, spared.
The danger of not punishing Villa while they appeared there for the taking was that the visitors slowly started to emerge from their stupor and began to get their act together with Christian Benteke coming close to equalising on 29 minutes when a fortuitous deflection left him clear with just Joe Hart to beat from eight yards – but the City keeper made a fine save with his feet.
By the end of the half it was Villa who looked more likely to bag the next goal and City who were on the back foot – quite a turnaround after such a one-sided opening
...City 3 Villa 2..
Yaya Toure was replaced at the break after picking up a knock of some kind, and Fernandinho came on to try and add some zip to the midfield and ten minutes into the second-half, James Milner replaced Frank Lampard.
City had two penalty appeals turned down with Aguero appearing to be pulled back in the box and then Silva was felled by a clumsy challenge by Carlos Sanchez, but referee Mike Dean gave neither.
There was now more energy to City’s play and the second goal finally came on 67 minutes with Aleks Kolarov curling in a beautiful free-kick from 20 yards following a foul on Fernandinho to at last give Manuel Pellegrini’s team breathing space
...City 3 Villa 2...
It looked as though that would be the Blues home and hosed, but Villa responded almost immediately with Tom Cleverley’s powerful shot deflecting through several bodies to give Hart no chance just two minutes later.
It was bad timing on City’s part because it inevitably reignited Villa into life once again with plenty of time still on the clock – and Villa used it well as the hosts looked increasingly edgy.
Sensing all was not lost, the visitors appeared to have earned a valuable point with just five minutes left when a corner was partially cleared to the edge of the box where Sanchez volleyed back past a stranded Hart to make it 2-2.
It looked like the Blues had dropped two points from a position of relative comfort, but as City probed forward looking for a late winner, a corner whipped in by Kolarov found its way to Fernandinho who controlled the ball before poking home from five yards to send the Etihad wild.
There wasn’t enough time for the visitors to claw their way back into the game for a third time and the Blues hung on to what in the end had been a hard-fought, though entertaining victory.