Villa twice led thanks to Ollie Watkins, but Arsenal twice hauled themselves level through Bukayo Saka and Oleksandr Zinchenko, who made it 2-2 just after the hour.
The drama came in injury time when Jorginho’s powerful shot bounced back off the crossbar end rebounded off Villa keeper Emiliano Martinez to end up in the back of the net.
Martinez then went forward for a corner in the last minute of injury time, but Arsenal cleared, leading Gabriel Martinelli able to run unopposed into the Villa half to finish the comeback with a fourth on the breakaway to assure the win.
Chris Wood’s 84th minute goal cancelled out Bernardo Silva’s opener for Manchester City, who drew 1-1 away to Nottingham Forest.
City were the better side in the first half, but Wood’s goal capped a brave fightback from a side that has lost just one of their last seven Premier League matches.
Liverpool looked to be coming into form just in time for their Champions League clash with Real Madrid after Jurgen Klopp’s side won 2-0 in Newcastle to inflict just the second defeat of the season on the home side.
Darwin Nunez opened the scoring in the 10th minute, and Cody Gakpo doubled the lead seven minutes later (both goals after VAR checks). The game was effectively over in the 22nd minute when home keeper, Nick Pope lost his footing and handled outside of his area to deny Mohamed Salah.
There were also changes at the bottom, as Seamus Coleman’s spectacular cross-shot ended up in the back of the net to give Everton a 1-0 home win over Leeds United.
The win lifts Everton out of the relegation zone, while Leeds drop to second from bottom, after Bournemouth claimed a surprise win away to Wolverhampton thanks to Marcus Tavernier’s 49th minute after Dominic Solanke’s cross.
Wolves had most of the ball, but created very little with their possession.
Southampton remain bottom of the table, but tightened things up in the relegation battle as they stunned Chelsea 1-0 at Stamford Bridge. James Ward-Prowse’s free kick on the verge of halftime gave the ‘Saints’ a win that increases the pressure on Chelsea boss Graham Potter, who made a lot of changes to the side that lost to Borussia Dortmund in midweek.
The worst moment for Chelsea came when Cesar Azpilicueta had to be carried off and receive oxygen after receiving an accidental kick in the head.
Fulham moved up to sixth after Manor Solomon’s 88th minute goal saw them complete a smash-and-grab raid away to Brighton, who had most of the ball and chances until the decisive goal.
Brentford and Crystal Palace took a point each after Vitaly Janelt netted a 96th minute equalizer to rescue a 1-1 draw for Brentford after Eberechi Eze had put the home side ahead.