(CNN) -- Australia took total command in the battle of Test cricket's top two-rated nations as they built up a lead of 297 runs over South Africa with nine second innings wickets remaining.
Johnson celebrates the wicket of Boucher on the third day at the Wanderers.
Replying to Australia's first innings total of 466, South Africa were bowled out for a paltry 220 at the Wanderers in Johannesburg, but visiting skipper Ricky Ponting chose not to enforce the follow-on.
By a premature close for bad light, his men had added 51 for the loss of opener Simon Katich to Morne Morkel with debutant Phillip Hughes (36 not out) and Ponting at the crease.
With two days remaining, Australia will be expected to wrap up victory in the opening Test of the series as they attempt to take revenge for a shock reverse to the second-ranked South Africans on home soil earlier this year.
Paceman Mitchell Johnson proved the Australian hero on the third day, fresh from his unbeaten 96 with the bat on Friday.
Left-armer Johnson took four wickets for 25 as only AB de Villiers offered much resistance, finishing with a magnificent unbeaten 104 for his eighth Test century.
It was Johnson's fellow seamer Peter Siddle who made the initial breakthrough as South Africa, resuming overnight on 85 for three, quickly lost Neil McKenzie trapped leg before wicket for 36.
Johnson removed JP Duminy (17) and Mark Boucher for a duck in quick succession to leave the home side in deep trouble.
Dale Steyn put on 52 for the ninth wicket with de Villiers, but he was removed by Andrew McDonald.
Last man Makhaya Ntini stayed around long enough for de Villiers to wrap up his century before being bowled by the excellent Johnson.