City took the lead in a pulsating content just 14 minutes in and it was little surprise to see Sergio Aguero volleying home.
Theo Walcott restored parity but it was not long before Alvaro Negredo put City back ahead.
Fernandinho extended their lead on 50 minutes before Walcott curled home a wonderful second – but City were not to be denied.
David Silva side-footed home from close range to add the fourth before Fernandinho added his second.
Per Mertesacker headed home a consolation for the visitors deep into injury time but there was still time for a sixth as James Milner was tripped in the box by Wojciech Szczesny to allow Yaya Toure to slide home a penalty to cap a remarkable win.
The win now takes City to within three points of Arsenal, who have certainly had a week to forget with two losses and a draw in the last six days.
City had started brightly but it Jack Wilshere who wasted a great chance to put Arsenal ahead after 11 minutes when he flashed his shot wide.
Soon City were back on top and the opener came on 14 minutes with the ubiquitous Aguero volleying home. The chance came as Martin Demichelis flicked on Silva’s corner and Aguero lost Laurent Koscielny before hammering the ball into the top corner from the corner of the six-yard box.
City continued to push and Negredo sent a great chance wide of goal after being played in by a brilliant ball from captain Vincent Kompany.
Toure then flashed a volley over the top of Szczesny’s goal as City looked to double their lead – but somewhat against the run of play it was Arsenal who levelled.
Great work from Aaron Ramsey dispossessed Toure, he played in Mesut Ozil down the left, and his pull-back found Walcott – whose first-time effort found the bottom corner with the help of a slight deflection off Demichelis.
Despite Arsenal’s goal, City were straight back on the front foot and Negredo again came close as he latched onto a Silva through ball but he could only curl it wide of the post.
But the Spaniard soon found his scoring touch as City went back into the lead just five minutes before the break.
A lovely ball from Toure with the outside of his right foot was taken down impeccably by Pablo Zabaleta and he rolled the ball into the path of Negredo – who slid it home from four yards.
In the aftermath of City’s goal further bad news for Arsenal came as Koscielny was stretchered off as he looked to have damaged his knee.
Demichelis then headed over as City went looking for a third, but as they pressed early in the second half they suffered their own injury blow as Aguero looked to have hurt his calf and limped off down the tunnel.
But just as Aguero was disappearing out of sight, City indeed added a third.
Fernandinho latched onto a misplaced pass which Mathieu Flamini could not collect and he drove to the edge of the box before curling the ball home.
Despite conceding the third Arsenal were quickly looking to try and respond, and Olivier Giroud was guilty of a hat-trick of misses in little over five minutes.
But just after the hour and Arsene Wenger got the response he was looking for as Walcott scored again. Ramsey teed it up and he curled home a wonderful effort into the top corner.
But yet more slack defending from Arsenal saw City restore their two-goal lead just moments after the away side had got themselves back into the game.
Jesus Navas fired a cross into the six-yard box where Silva had got ahead of Mertesacker and he clinically side-footed home from close-range.
Fernandinho added his second with just minutes left as he clipped the ball over Szczesny – but there was still time for two more goals.
Mertesacker headed home Arsenal’s third, before Toure converted a penalty to make it six after Milner was brought down by Szczesny.