Christian Benteke gave Villa a flying start, firing home his 11th goal of the season after just five minutes.
But by half-time, Villa's hopes of a third consecutive Barclays Premier League win had effectively evaporated as Stoke City hit back to lead 3-1.
Former Villa striker Peter Crouch set up Peter Odemwingie for a 22nd-minute equaliser and then fired the visitors ahead four minutes later.
Steven Nzonzi added number three in the 43rd minute, and Paul Lambert's side were unable to make any impression in the second half.
And to rub salt into the wounds, full-back Geoff Cameron added a fourth goal for the Potters in the last minute.
Yet it had looked so promising for Villa, and the opening goal was superbly crafted.
Fabian Delph gave full-back Cameron the slip as he moved on to Ryan Bertrand's pass before cutting the ball into Benteke's path.
The Belgian striker quickly brought it under control before lashing a fierce left-foot shot just inside the near post from eight yards.
It was the perfect start, and a couple of minutes later Benteke was shaping up for a possible second until Cameron conceded a corner to prevent Delph's cross from the right from reaching him at the far post.
Andi Weimann then had snap shot blocked just outside the penalty area before Bertrand's centre flashed across the face of goal following a neat link-up with Delph.
It was the 20th minute before Stoke posed their first threat, Odemwingie displaying some clever footwork before sending a left-footer just too high from the edge of the area.
Two minutes later, the visitors were level, Crouch heading on for Odemwingie to steer a low shot past Brad Guzan despite Bertrand's challenge.
And after Nathan Baker had sent a glancing header wide, Stoke were ahead in the 26th minute, Crouch side-footing the visitors into the lead after Erik Pieters had knocked the ball in to him from the left-hand edge of the penalty area.
Having looked so assured in the opening stages, Villa were clearly rattled, and Gabby Agbonlahor fired well over following Benteke's short pass.
In the 33rd minute, Villa were forced into a double substitution.
Karim El Ahmadi and Weimann had both taken knocks and were replaced by Yacouba Sylla and Marc Albrighton respectively.
Villa's problems intensified two minutes before the interval, Nzonzi drilling a low shot beyond Guzan's despairing reach after Pieters' pass had evaded Ron Vlaar.
After a sluggish start to the second half, Delph raised home hopes with a forceful 30-yard run before slipping a neat through ball to Benteke, whose shot clipped off the heels of a defender.
The striker found another dangerous position a couple of minutes later and was adamant he should have had a penalty when he was pushed over by Cameron.
Referee Mark Clattenburg waved aside the appeal, though, and all Benteke got for his protest was a yellow card.
Just as they had in the first half, Stoke sat back for the opening minutes of the second period but in the 64th minute Odemwingie unleashed a powerful 25-yard drive which almost caught Guzan off balance, the keeper pushing the ball away with some difficulty before Vlaar completed the clearance.
After that, the game looked like petering out to a tame conclusion - until Cameron stroked home number four following Amautovic's pass.
Villa: Guzan; Bacuna, Vlaar, Baker, Bertrand; El Ahmadi (Sylla 33), Westwood (Holt 73), Delph; Weimann (Albrighton 33), Benteke, Agbonlahor. Unused subs: Steer, Clark, Bennett, Robinson.
Stoke City: Begovic; Cameron, Shawcross, Wilson, Pieters (Muniesa 78); Whelan, Palacios; Odemwingie, Nzonzi, Amautovic; Crouch. Unused subs: Sorensen, Shea, Guidetti, Wilkinson, Shotton, Ward.