Ryan Dempster solved early control problems to post a line of three runs, three hits, four walks and seven strikeouts over five innings. Michael Wuertz, Neal Cotts and Bob Howry combined for three innings of hitless relief. With Kerry Wood having pitched two days in a row, Carlos Marmol subbed in the ninth for his third save.
Dempster (7-2) walked three Rockies hitters in the first two innings, including a particularly painful two-out free pass to Chris Iannetta in the second. Iannetta scored on Omar Quintanilla's two-run shot to put the Rockies up, but the Cubs would work their comeback magic again.
Dempster helped his cause by doubling home Kosuke Fukudome, who led off the second with a single, and Soriano drove in Dempster with his 12th homer. Dempster said he would razz his good friend Glendon Rusch after the game for serving up Dempster's first extra-base hit since July 17, 2002.
"As a pitcher, we try to do whatever we can to contribute, whether it's getting a sac bunt down or trying to get a base hit," Dempster said. "I was lucky I ran into a ball right there, and it got in the right spot."
Aramis Ramirez and Geovany Soto knocked back-to-back doubles in the third to go up, 4-2. Soriano (2-for-4, three RBIs, one run and one stolen base) slapped a run-scoring single in the fourth to drive in Reed Johnson, who had doubled into the ivy to lead off the inning.
Dempster looked extremely sharp after the second inning, retiring nine of 10 batters to finish his outing, but Cubs manager Lou Piniella planned to keep his day short. The converted closer, who had thrown 117, 109, 115 and 118 pitches in his past four starts, threw 93 pitches on Saturday.
"He was actually getting a little better as the game progressed," Piniella said. "But we wanted to really shorten him today to 85 or 90 pitches. The last couple games he's pitched, he's gone through seven innings throwing a lot of pitches. We want to make sure that we got his pitch count down, this start in particular and hopefully one more."
Soriano received a scare in the eighth when he got hit by a pitch on his foot. But he allayed any concerns by stealing his first base since straining his calf on April 15. Piniella replaced Soriano in a ninth-inning double switch, but the move had nothing to do with the hit-by-pitch.
Scott Podsednik's solo shot off Marmol with two outs in the ninth made it a one-run game. That made Fukudome's leaping catch to rob Quintanilla of extra bases in the previous at-bat a game-saver.
"[That was a] nice play out in right-center field, wind blowing out," Piniella said. "He timed the jump perfectly."
Former Cubs starter Rusch (1-3) made his first Major League start since a blood clot was discovered in his left lung in September 2006. He gave up five runs on nine hits in 4 2/3 innings. Rusch struck out four and walked one opposite his good friend Dempster.
"I think it's really remarkable. Here's a guy who had his career stopped short because of something that was non-baseball-related, to have a blood clot in his lung, to have to sit out all that time," Dempster said. "It was a lot of fun to face him today. He looks great. He's throwing the ball really well, and hopefully, he's here to stay for a long time."