Kennedy, in for Nathan Doyle and partnering captain Gary Jones, struck a late goal to clinch City’s first win in eight games and move them back into the top six.
His 85th-minute goal, sliding the ball home from James Meredith’s low cross to the far post, came after MK Dons had twice hit back from earlier strikes by Nahki Wells and Kyel Reid.
Parkinson admitted: “We’re all on a high because MK Dons don’t lose many at home.
“I’ve brought a Charlton team here many times and it’s a really difficult place to play.”
After seeing City pegged back to 2-2, he added: “The way we responded was outstanding and the winning goal typified what we’re all about. It was outstanding play.”
MK Dons manager Karl Robinson claimed: “We were by far the better team today. Sadly for us, we’ve lost the game, and I know why – silly errors.”
Wells had put Bradford ahead after 22 minutes, neatly steering home Garry Thompson’s low cross for his 13th goal of the season.
Daniel Powell was then denied an equaliser when one-on-one with goalkeeper Jon McLaughlin before Patrick Bamford did bring the Dons level in the 36th minute, racing clear onto Darren Potter’s pass.
Reid restored City’s lead two minutes before the break when his 30-yard cross-shot looped home. Wells also struck a curling free-kick against a post but then tripped Dele Alli, allowing Williams to equalise from the penalty spot after 72 minutes.
Milton Keynes Dons: McLoughlin, Hodson, Spence, Williams, Lewington, Powell, Gleeson, Potter, McLeod (Reeves 60), Alli, Bamford. Unused substitutes: Flanagan, Smith, Baldock, Jason Banton, Carruthers,
Bradford City: McLaughlin, Darby, Bates, McArdle, Meredith, Thompson (Doyle 77), Jones, Kennedy, Reid (Yeates 82), Hanson, Wells. Unused substitutes: Ripley, Taylor, Connell, De Vita, McBurnie.
Referee: G Ward (Surrey).
Man of the match: J Kennedy.