Fresh from netting nine goals in a week against Manchester United and Wigan Athletic, City were in dominant mood in the first half on Saturday but had to wait for Yaya Toure's sixth strike in eight games to put them ahead in its final minute.
Having failed to muster a shot on target before the break, Karim El Ahmadi produced a clinical finish to haul Villa level amid strong suspicions of offside in the 51st minute.
Edin Dzeko glanced in from Samir Nasri's corner to restore City's advantage five minutes later but Bacuna lashed home a stunning free-kick for his first Villa goal after Matija Nastasic fouled Weimann.
And Nastasic and Vincent Kompany were caught napping as Weimann stole in to beat the on-rushing Joe Hart with a 75th-minute winner.
In the injury absence of forward duo Christian Benteke (hip) and Gabriel Agbonlahor (ankle), Villa manager Paul Lambert handed a first start to last weekend’s match-winner at Norwich City, Libor Kozak, and reverted to a 5-3-2 formation.
Sergio Aguero picked up a knock after firing a derby day brace last weekend, meaning Dzeko partnered Alvaro Negredo in attack. Elsewhere, Jesus Navas dropped to the bench to accommodate Villa old boy James Milner in the City midfield.
And Milner had the game's first opening in the third minute, lashing wide left-footed after Dzeko dummied a low cross from Aleksandar Kolarov.
Continuing the impressive form he showcased six days ago, Samir Nasri was at the hub of an impressive start by the visitors.
First, a cute through-ball allowed Dzeko to slide in on the angle and draw a save from Brad Guzan before the France international fired narrowly wide from the edge of the box having led a swift counter-attack.
Dzeko failed to get on top of a good headed chance from a 14th-minute corner and City proceeded to dominate the opening half hour without again testing Guzan.
City's pressure continued largely unchecked but they were undermined failing to consistently find a quality final ball until the half’s outstanding player intervened at its conclusion.
After watching Ciaran Clark clear off the line and Nathan Baker deflect his fierce drive wide, Toure crowned a typically dominant display from midfield by steering Nasri’s corner through Guzan’s legs.
Negredo and Kolarov threatened as City began the second period at a furious place but Manuel Pellegrini's team would soon rue their profligacy.
El Ahmadi collected Bacuna's wonderfully weighted pass to fire home low across Hart as the linesman's flag stayed down.
But as they did from their ninth corner, City netted from their 10th to ensure parity lasted only six minutes.
Dzeko made the most of a static Villa defence to glance Nasri's in-swinging delivery past Guzan and the USA international got down well moments later to keep out a thunderous Negredo volley.
Ring-wing crosses from Zabaleta and Navas – introduced in place of Nasri – invited further punishment that did not arrive from Dzeko but just as Villa looked to be entering survival mode the stunned City again.
Villa Park was in raptures following Bacuna's heroics and the noise levels were further ramped up as Weimann lifted Villa up to ninth in the table – only a point behind City in fifth.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.