Victory saw World Twenty20 champions England, who head to Sri Lanka on Thursday to defend the title they won in the Caribbean two years ago, square this three-match series at 1-1 with one no result.
Most of Buttler's runs, in a match reduced by rain to 11 overs per side, came in a costly ninth over worth 32 from left-arm quick Wayne Parnell.
It was the second most expensive over in Twenty20 international history after Yuvraj Singh struck England captain Stuart Broad for 36 runs made up of six sixes in Durban during the inaugural 2007 World Twenty20.
England made 118 for five -- with man-of-the-match Buttler facing just 10 balls including three sixes and two fours.
South Africa, who were never up with the rate, finished on 90 for five.
"It's nice it came off, it was one of those days," said Buttler, whose previous England best was 13.
"International cricket hasn't gone quite as I'd hoped so far, so it's nice to contribute to a winning side," explained the Somerset batsman, who celebrated his 22nd birthday last week.
Broad added: "Jos's was a game-changing innings. We know how good he is, he's shown on the county circuit that he does that, he's done it on the international scene now.
"It's always nice when you've got a guy who can hit it into the top tier and that was highly impressive. Jos was promoted up the order and those ten balls changed that game.
"We've got a squad that can do well in Sri Lanka but we don't want to look too far ahead."
South Africa captain AB de Villiers, involved in the Proteas preceding Test series win over England and the shared one-day campaign, admitted his team were second best on Wednesday.
"I thought we were completely outplayed today. We didn't start well and I made a few tactical errors."
De Villiers added: "We made mistakes in the field but there are lots of positives for the World T20, we've played some good cricket all summer and we're looking forward to Sri Lanka."
England opener Craig Kieswetter made 50 off 32 balls with three sixes and three fours and together with Buttler he put on 48 in 14 balls.
South Africa fast bowler Morne Morkel's third ball of the match was a huge wide that sped past wicket-keeper de Villiers on its way to the boundary, with 16 runs in all coming off the first over.
But South Africa pulled things back in the second over when Parnell bowled recalled opener Michael Lumb middle stump.
Luke Wright then holed out against off-spinner Johan Botha to leave England 43 for two in the fifth over.
Botha took an impressive two for 19 in three overs but Kieswetter got England going again by launching fast bowling all-rounder Jacques Kallis for six over long-on.
Buttler then struck Parnell for two superb straight sixes in as many balls.
And when Parnell twice no-balled, Buttler cleverly flicked the resulting free-hits over short fine leg for two consecutive fours.
He then pulled him for six as 32 runs came of the over.
Kieswetter then pulled Morne Morkel for six to complete his fifty only to be bowled next ball.
South Africa suffered an early setback when the big-hitting Richard Levi was bowled by Tim Bresnan for one.
And they lost Faf du Plessis for eight when, hitting across the line, he became debutant left-arm spinner Danny Briggs's first Twenty20 international wicket after getting a leading edge to mid-off.
Briggs, a star performer for English county Twenty20 champions Hampshire, took one for 16 in two overs.
But Hashim Amla, a thorn in England's side throughout this summer, was still there.
However, Amla fell for 36, off 27 balls with six fours, when he slogged off-spinner Graeme Swann to Jonathan Bairstow in the deep and from then on there was no way back for South Africa.