Arsenal's 2-2 draw at Southampton on Tuesday had given their two closest rivals a glimpse of top spot, but while City seized the opportunity, Chelsea were left in third place after a 0-0 draw at Stamford Bridge.
City had crushed Tottenham 6-0 in the reverse fixture in November and they wasted little time asserting themselves again amid pouring rain at White Hart Lane.
Having already struck the post, Sergio Aguero broke the deadlock in the 15th minute when he scuttled onto David Silva's pass and slipped a delicate shot past goalkeeper Hugo Lloris.
Michael Dawson thought he had equalised in the 36th minute when he volleyed home from Christian Eriksen's fierce free-kick, only to be adjudged offside.
City lost Aguero to an apparent hamstring injury on the stroke of half-time, but they extended their lead in the 51st minute when Yaya Toure tucked away a penalty after Danny Rose was sent off for sliding in on Edin Dzeko.
Dzeko made it 3-0 six minutes later, slamming a shot into the roof of the net after Silva's shot came back off the post, before Etienne Capoue reduced the arrears from a corner.
It gave the hosts a flicker of hope, but Stevan Jovetic, Aguero's replacement, made the game safe in the 78th minute with his first Premier League goal before captain Vincent Kompany added a fifth at the death.
Chelsea frustrated by West Ham, Villa win Midlands derby
It was an eighth successive league win for Manuel Pellegrini's side, who lead Arsenal by a point and Chelsea by three after Jose Mourinho's team were unable to break down Sam Allardyce's obdurate West Ham.
Brazilian playmaker Oscar came closest to scoring in the first half for Chelsea, who visit City on Monday, with a shot that was touched onto the crossbar by West Ham goalkeeper Adrian.
Adrian also saved well from John Terry and Samuel Eto'o, while Demba Ba hit the post deep into stoppage time as Chelsea laid siege to the visitors' goal in vain.
A 25-yard Chris Brunt half-volley and a Fabian Delph own goal put West Brom 2-0 up inside only nine minutes, but, just as they did in the reverse fixture, Villa fought back to level.
Goals from Andreas Weimann and Leandro Bacuna gave Paul Lambert's side parity and Delph then atoned for his earlier error by putting the hosts ahead with a vicious rising shot in the 37th minute.
Youssouf Mulumbu equalised for West Brom just before the interval, but Christian Benteke secured victory for Villa in the 64th minute when he converted a penalty after being brought down by Diego Lugano.
Elsewhere, Adam Johnson scored his sixth goal in six games as Sunderland climbed out of the relegation zone with a 1-0 win at home to Stoke City, who had Steven Nzonzi sent off for two bookable offences.