The Korean scored the winner just 18 minutes into the game, which both sides finished with just 10 men following the late dismissals of Emir Spahic and Sokratis Papastathopoulos.
South Korea star Son helped former club Hamburg achieve a stunning double over Dortmund last season with two goals in each of its Bundesliga wins.
And he returned to haunt Jurgen Klopp by rounding Dortmund goalkeeper Roman Weidenfeller and scoring the game's only goal in the 18th minute at Signal-Iduna Park on Saturday after an error from former Leverkusen defender Manuel Friedrich.
Leverkusen defender Emir Spahic was sent off with 10 minutes left after a two-footed tackle on Robert Lewandowski, followed by a push at Henrikh Mkhitaryan, with Dortmund's Sokratis Papastathopoulos also given his marching orders in the dying stages.
The result deals a major blow to Dortmund's chances of winning the Bundesliga, with last year's runner-up already 10 points behind runaway leader Bayern Munich, while Leverkusen remains four behind in second.
Friedrich retained his place despite Dortmund making five changes from the side that won at Saarbrucken in the DFB-Pokal on Wednesday, with Weidenfeller, Lewandowski and Jakub Blaszczykowski among the inclusions.
Spahic, Jens Hegeler and Gonzalo Castro came in for Leverkusen, which started brightly, despite Lewandowski testing goalkeeper Bernd Leno in the early stages.
Emre Can curled an effort over for the visitors and although Papastathopoulos wasted a header at the other end, Leverkusen took a deserved lead in the 18th minute.
The visitors pressed Dortmund well and Friedrich gave the ball away to Can, who quickly found Castro. The midfielder released Son and a great first touch saw him beat Weidenfeller before calmly slotting into the net with his left foot.
Lewandowski poked an effort at Leno again before Son – once more sent clean through, this time by a superb Stefan Kiessling pass – saw his effort clip the shoulder of the onrushing Weidenfeller and narrowly miss the goal.
The visitors continued to attack on the counter and a clever team move saw Hegeler chip just over as Leverkusen entered the break in style.
Chances were few and far between in the second half, with Kiessling doing well to clear the danger after a clever Friedrich header caused problems.
Sven Bender was forced off with an injury just before the hour-mark after a late Hegeler tackle and replaced by Marco Reus – returning from a calf problem of his own – but the change failed to spark Dortmund.
Nuri Sahin also had to be withdrawn, before Spahic's red card, but Dortmund failed to find an equalizer and was down to 10 men itself in stoppage time as Papastathopoulos was dismissed for dissent.
Follow GOAL.COM USA on