Australia's Ryan Harris took the last two wickets as South Africa came within five overs of saving the third Test on a dramatic day in which a third umpire decision came close to deciding the outcome of the match.
South Africa were bowled out for 265 as Australia won the series-deciding third Test by 245 runs at Newlands, leaving their captain Graeme Smith to retire from international cricket with a defeat.
Not even a controversial third umpire decision could derail Australia's victory charge, though they left it late in the day to force the win with Harris (four for 32) the hero.
The Proteas looked as though they would escape with a draw as they got within five overs of safety but Harris bowled out Dale Steyn and Morne Morkel to wrap up victory for the tourists.
Vernon Philander was not out on 51 after surviving a controversial moment with 16 overs remaining that left Australia seething when third umpire Richard Illingworth overturned a decision against him.
Mitchell Johnson produced a fierce bouncer that clearly caught the right thumb of the South African, who was given out by on-field umpire Aleem Dar.
Philander reviewed the decision and it was overturned based on the view that the batsman's hand was not on the bat handle.
Replays looked inconclusive and the Australians were seething, leading to an ugly verbal confrontation between touring captain Michael Clarke and Steyn.
The victory gave Australia the series 2-1 and came in the wake of their 5-0 thrashing of England in the home Ashes series played earlier this year.
South Africa started the day on 71 for four and batted for 94 overs but could not find an anchor all day, despite a number of candidates emerging.
Philander, Faf du Plessis (47), JP Duminy (43) and AB de Villiers (43) all spent time at the crease, but not long enough to save the Proteas from a first series defeat since Australia won by the same scoreline in the 2008/09 season.
The match is the last for South Africa's Smith who announced his retirement from international cricket after day three of the test having played in 117 five-day games, 109 as skipper.