The first concrete chance came the way of the home side when, in the sixth minute, ex-Manchester United midfielder Shinji Kagawa picked up a Ciro Immobile pass before shooting from the right side of the box, but the effort was saved.
Milos Jojic then threatened three minutes later, but the visitors countered through Christian Gentner, who blasted the ball wide immediately after.
Dortmund caused panic in the 19th minute when Pierre-Emerick Aubameyang and Marcel Schmelzer forced two blocks in quick succession, but Stuttgart then launched into a good spell of their own when Carlos Gruezo and Timo Werner could have scored.
The home side nevertheless were dominant in the first half, as Immobile blasted over on the half-hour mark, while Kagawa came even closer after striking the Stuttgart bar.
The second half saw a glut of goals fly in, as Daniel Didavi broke the deadlock for the visitors by poking the ball home following a Christian Gentner corner three minutes after the restart.
Stuttgart then silenced the home crowd further when Didavi struck his second in the 68th minute, the 24-year-old German firing past Roman Weidenfeller after being set up by Timo Werner.
Pierre-Emerick Aubameyang game Dortmund hope just five minutes later after finding space and prodding the ball into the bottom corner of the net.
With just four minutes left to play, Immobile was the hero for the home side, the Italian making the most of a Marcel Schmelzer free kick to fire home and seize a point for his team.