City's win prevented United from extending their seven-point lead at the summit, after they overcame West Bromwich Albion 2-0 to take their tally for the season to 50 goals.
United manager Alex Ferguson was the focus of pre-match attention at Old Trafford for an outspoken attack on Newcastle United coach Alan Pardew, but his side got down to business quickly and went ahead inside nine minutes.
The scorer wore a blue and white shirt, however, with West Brom defender Gareth McAuley inadvertently shinning the ball into his own goal after Ashley Young drove a low cross across the face of goal.
The hosts were not able to breathe easily until substitute Robin van Persie curled a glorious shot into the top-left corner in the last minute, before unveiling a T-shirt that paid tribute to a personal friend who recently died.
"We're in a good position," Ferguson told the BBC.
"We're halfway there. We've a game on Tuesday away from home at Wigan and we've got a few players to freshen it up. We'll look forward to the next game and try and win it."
City lost Samir Nasri to a first-half red card at Norwich but edged an open-ended encounter thanks in no small part to Edin Dzeko, who scored twice and might have had a hat-trick.
The Bosnian, who has had to become accustomed to a role on the substitutes' bench this season, struck twice inside the opening four minutes to put City in control at Carrow Road.
But Norwich hit back through a deflected Anthony Pilkington free-kick, and the visitors were then dealt a blow when Nasri was sent off for aiming a head-butt at Sebastien Bassong.
Sergio Aguero's deft, lobbed finish made it 3-1, but City were indebted to an own goal by Norwich goalkeeper Mark Bunn, who inadvertently deflected Dzeko's shot into his own net, after Russell Martin had twice hit back for the hosts.
"I don't know why [Nasri was sent off] as the linesman was there and I don't know what he saw," said City manager Roberto Mancini, whose side lost 1-0 at Sunderland on Wednesday.
"We saw the video — both players touch heads. With 10 men it was difficult. The guys played very well."
A day bursting with goals — 35 in total — concluded in an extraordinary game at the Emirates Stadium in which Theo Walcott claimed a hat-trick as Arsenal overcame Newcastle 7-3 to climb to fifth.
Arsenal took the lead three times, through Walcott, Alex Oxlade-Chamberlain and Lukas Podolski, only for Newcastle to hit back each time through Demba Ba, Sylvain Marveaux and Ba again.
Arsene Wenger's men finally killed the game off in the latter stages, with Walcott completing his treble and substitute Olivier Giroud claiming a quick-fire brace.
"I've been saying for the past few weeks that I want to play up front and I am showing the manager what I can do," said Walcott.
Wenger paid tribute to Walcott.
"He has done very well, it typifies what I think he can do. He can play through the middle, he will only get stronger," said the Arsenal manager.
Tottenham had earlier overturned a half-time deficit to win 2-1 at Sunderland and provisionally move into third place.
John O'Shea scored against the run of play to put the hosts ahead at a rain-sodden Stadium of Light, but a Carlos Cuellar own goal drew Spurs level before Aaron Lennon completed the comeback with a composed 51st-minute strike.
Andre Villas-Boas' side have taken 19 points from a possible 24 and are now a point above third-place Chelsea, who have two games in hand and visit Everton on Sunday.
Elsewhere, Aston Villa's recent miseries continued as they sank 3-0 at home to Wigan Athletic.
Goals from Ivan Ramis, Emmerson Boyce and Arouna Kone put paid to Paul Lambert's young team, who have now shipped 15 goals in three games after losing 8-0 to Chelsea and 4-0 to Tottenham Hotspur.
Villa would have slipped into the relegation zone had third-bottom Southampton not been denied victory in a 3-3 draw at Stoke City by a sensational 25-yard strike from Cameron Jerome.
Southampton had led 3-1, and played against 10 men following the 71st-minute dismissal of Steven N'Zonzi, but second-bottom Reading did a better job of defending a lead in a 1-0 home win over West Ham United.
Fulham's dismal form continued, meanwhile, as they lost 2-1 at home to Swansea City.