Pierre-Emerick Aubameyang put Dortmund in front in the 25th minute, but a Florian Klein penalty brought Stuttgart back on level terms.
Ilkay Gundogan restored Dortmund’s lead before Marco Reus gave Dortmund a deserved cushion late on.
Georg Niedermeier made things a little more interesting in stoppage time, but Stuttgart could count themselves fortunate to get two goals as their future looks bleaker with every game.
Dortmund were quick to stamp their authority on the game with Nuri Sahin seeing his header turned behind by Sven Ulreich before Aubameyang saw a goal disallowed for offside.
Only Dortmund were doing any attacking and it seemed inevitable that they would make the breakthrough sooner or later.
It happened in the 25th minute when Aubameyang tucked in Shinji Kagawa’s pass from eight yards out, this time with the offside flag staying down.
Stuttgart showed some rare signs of life, and suddenly they were given a lifeline when Sahin took Niedermeier’s leg from under him as he was preparing to tuck a loose ball into a practically unguarded goal from three yards out.
Klein converted the penalty right into the bottom left-hand corner, beyond the reach of Roman Weidenfeller who dived the right way.
Few inside the stadium really seemed convinced that Stuttgart were going to be able to build on their equaliser, though, as Dortmund hit straight back.
They regained the lead five minutes before half-time when Kagawa’s backheel was helped on by Carlos Gruezo to Gundogan, who slotted his shot inside Ulreich’s near post.
Dortmund continued to have an air of superiority in the second half, but struggled to translate that into goal.
Kagawa saw his angled shot saved by Ulreich after good work from Reus and Aubameyang before Reus pounced on a weak backpass from Timo Baumgartl to round Ulreich and make it three late on.
It gave a more realistic look to the result, even though Niedermeier’s header from a corner in the first minute of stoppage time gave Stuttgart some unexpected and ultimately unfulfilled hope.