Set to make an unlikely 482 to win, South Africa were 132 for five at tea, with AB de Villiers again providing the only significant resistance to the Johnson-inspired bowling attack.
De Villiers, who made 91 in the first innings, was 39 not out.
As he did in the first innings, Johnson took a wicket in his first over, having Alviro Petersen caught behind for one. It was Johnson's 250th Test wicket in his 57th Test match.
Faf du Plessis was the third man out, with the total on 49, falling victim to a ball which shot through low from Peter Siddle and trapped him in front of his stumps.
More From This Section
Hashim Amla made a solid 35 before he was caught at first slip off Ryan Harris.
Johnson, who took seven for 68 in the first innings, completed the third ten-wicket haul of his Test career when Doolan made another outstanding catch at short leg, snapping up JP Duminy.
There was a hold-up shortly before the tea break when a Johnson bouncer hit the earpiece of Ryan McLaren's helmet, with the batsman needing treatment on the field before continuing.
Australian captain Michael Clarke declared his side's second innings closed at 290 for four after only 3.2 overs when first innings centurion Shaun Marsh was caught behind off Dale Steyn without adding to his overnight score of 44.