Halton cracked a single that drove in two of the five runs the Brewers hung up in the fourth and added an insurance RBI base hit in the fifth.
The fourth-inning rally overcame a 2-1 St. Louis lead and set the Brewers on course to their first win at home against the Cardinals in six tries.
Kyle Lohse (9-8) earned the win over his former team with a six-inning start that included three runs on six hits.
Lance Lynn (13-7) suffered the loss after allowing six runs -- four earned -- on nine hits over six innings. The loss ended the Cardinals' three-game winning streak.
Yadier Molina had a two-rum homer for the Cards and Matt Adams singled in a run in the first inning.