Marco Reus single-handedly dismantled the Eagles with a hat-trick as the Bundesliga champions moved back within 15 points of runaway leaders Bayern Munich, who won 2-0 at Wolfsburg on Friday night.
The Germany international netted two goals in as many first-half minutes and added a third midway through the second half after Julian Schieber had been given his marching orders - the second straight weekend Dortmund have finished with 10 men.
Bayer Leverkusen snapped a three-game winless streak with a 2-1 home victory over relegation-threatened Augsburg to remain in the running for second.
Stefan Kiessling opened the scoring for Leverkusen in the 26th minute and Lars Bender doubled their advantage 15 minutes from time.
Sascha Molders made things interesting by pulling a goal back for the visitors in the 89th minute, but they could not force an equaliser.
Meanwhile Rafael van der Vaart's brilliant first-half goal proved decisive as Hamburg boosted their hopes of European football with a 1-0 triumph over Borussia Monchengladbach.
The Holland midfielder despatched a fine effort into the top-left corner from outside the box in the 24th minute.
Michael Bastos scored a brace as Schalke twice came from behind to draw 2-2 at Mainz.
Mainz went ahead through Andreas Ivanschitz in the 27th minute, but Bastos levelled four minutes before the break. Zdenek Pospech restored the hosts' lead midway through the second half, but Bastos ensured the visitors a draw with eight minutes left.
Freiburg twice saw Werder Bremen equalise before finally taking the lead and finishing off a 3-2 victory, recording their first win over Bremen in 11 years.
Max Kruse gave Freiburg the lead after 36 minutes before Nils Petersen equalised moments later.
Daniel Caligiuri made it 2-1 to the visitors from the penalty spot in the 55th minute, and, although Petersen's second levelled it up again nine minutes later, Matthias Ginter's 70th-minute strike finally settled it.
Finally, Axel Bellinghausen's early goal was enough for Fortuna Dusseldorf to defeat 10-man Greuther Furth 1-0 at home in a battle of promoted teams.
Dani Schahin missed an early penalty for the hosts before Bellinghausen grabbed the game's only goal in the 18th minute. Bottom-of-the-table Furth had midfielder Jozsef Varga sent off in the 38th minute for a second bookable offence.