All four debutants contributed, especially lego spinner Tanvir Sangha (4-31) and bowler Spencer Johnson (2-33).
South Africa were never able to get the game started. Leading 69-5, it lost its last five wickets, conceding nine.
Marsh entered the game after just three innings and scored 20 runs in the second over by Lungi Ngidi.
Matthew Short departed for Marco Jansen and in less than four overs the partnership was taken to 50 overs.
Marsh knocked Kingsmead medium-pacer Lizad Williams out in the fifth over and in the ninth over he made his fastest fifty in T20, off 22 balls.
David struck sixes over long-on and midwicket off Tabraiz Shamsi, and also sent new medium pacer Gerald Coetzee’s innings over midwicket.
After a half-century off 24 balls, David struck another six off Shamsi before being bowled by Temba Bavuma for a boundary.
David and Marsh combined to score 97 runs.
Marsh was losing momentum but eventually remained unbeaten after 13 boundaries and two sixes.
South Africa’s reply was poor.
In the first over, Bavuma hit Marcus Stoinis with an inside edge on the off stump.
Stoinis was hit by Rassie van der Dussen for 15 runs and new fast left fielder Johnson made 17 runs immediately afterwards.
But van der Dussen fell to Shaun Abbott in the 21st minute and Sangh’s introduction decisively ended the encounter.