McCall rested winger Marshall but brought him on just after the break with City trailing 1-0.
And Marshall made an immediate impact, scoring an equaliser before setting up Jordy Hiwula for a late winner.
The victory, City’s first in six, sees them remain fifth in League One. McCall said: “In the first half we had no width and I knew that Mark was a good sub to have, especially playing two games in three days as we have done.
“We thought there might be a chance of them tiring and the second half was just wave after wave of attacks from us and that’s where Mark came in. The fans deserved better than what we gave them in the first half.”
A poor first half from City was compounded on 39 minutes when hitman Alex Revell put the hosts in front after glancing a header beyond Colin Doyle.
City were banging at the door after the restart with Hiwula going close before Josh Cullen’s drive was kept at bay. But the breakthrough arrived on 73 minutes when Marshall rifled home. He then turned provider when he dashed to the byline and teed up Hiwula for his seventh of the campaign.
Northampton: Smith, Phillips (Diamond 46), Nyatanga, Zakuani, Buchanan, Hoskins, O’Toole (McCourt 72), Taylor, Anderson (Wylde 58), Revell, Richards. Unused substitutes: Potter, Beautyman, Iaciofano, Cornell
Bradford: Doyle, Darby, Knight-Percival, McArdle, Meredith, Vincelot (Marshall 47), Dieng, Law, Cullen, Vuckic (Hanson 46), Hiwula. Unused substitutes: Sattelmaier, Devine, Kilgallon, McMahon.
Referee: S Duncan (Northumberland).