Butler three-run homer in the sixth propelled Kansas City to a 7-2 victory over the Chicago White Sox on Thursday night for the Royals fifth straight victory.
The loss officially eliminated the White Sox from the playoffs.
"It's a very disappointing, very inconsistent season," White Sox manager Ozzie Guillen said. "I have regrets. Regrets we didn't play better. I thought we had a better shot to win the division. Detroit earned it with the way they've played."
The Royals' five-game winning streak is their longest since they won five straight from Sept. 7-11, 2009.
Butler was in a 2-for-27 skid coming into the game.
"I've had a string of a bad week or so," Butler said. "It's good to come out of it. I hit that ball good and did some damage with it. I had a couple of more opportunities. Up and down the lineup we're doing well. We're picking each other up."
Cabrera's four-hit game matched a career high and his double in the sixth was his 40th as an outfielder -- he has one as a DH. The Royals are the first team in major league history to have three outfielders with 40 or more doubles. Alex Gordon and Jeff Francoeur both have 45.
"When you look at our outfield offensively, the first time in the history of the game three outfielders have 40-plus doubles and add that to the fact that the same outfield is leading all of baseball in assists (with 50), they are a pretty special group," Royals manager Ned Yost said.
"The three outfielders have been the cornerstone of our team. They are the veteran guys. They provide all the leadership. They provide a big chunk of the offense and a big chunk of the defense."
Cabrera raised his average to .303.
"Melky has been a huge addition," Butler said. "The way he played tonight was unbelievable. That's the way he's been all year. He's been very consistent. You can pretty much look at any game and he's made a difference for us offensively."
Butler's 19th home run in the sixth inning came off Mark Buehrle (11-9), who has lost five of his last six starts. Buehrle, who gave up a career high 15 hits, left in the seventh inning after being struck in the left biceps by an Alcides Escobar line drive. Buehrle said he does not anticipate he will miss his next start.
"It's fine," he said. "I could have stayed in, but there's no reason when you're getting your fanny handed to you."
Buehrle has a career 22-12 career record against Kansas City.
"Its feast or famine, that's the way it is with him," Butler said. "Throughout his career, it's been more feast for him than us. It's good to get one from him. It took a shot off his arm to get him out of there. He's given us a lot of tough times in the past."
Cabrera homered in the first, while Butler scored on Salvador Perez's two-out single for the second run of the inning.
Left-hander Jeff Francis, who was 1-5 in his previous seven starts, allowed two runs, eight hits and two walks in six innings. Both runs off Francis (6-16) came on sacrifice flies -- by Alex Ramirez in the third and Tyler Flowers in the sixth.
"Look at his full body of work over the course of the year and he's pitched much better than his record will indicate," Yost said. "He's had a real solid year."
Every Royal had a hit except for Gordon, who walked twice. Perez's three hits matched his career high, while Yamaico Navarro drove in two runs with a single and a sacrifice fly.
Royals RHP Luke Hochevar is being shut down for the remainder of the season after throwing a career-high 198 innings, 90 more than last year when he missed 2½ months with an elbow injury. Hochevar finishes with an 11-11 record and 4.68 ERA. The Royals are 5-0 when Navarro is the starting third baseman. White Sox C Ramon Castro, who went on the DL on July 10 with a broken right hand, is rehabbing with the team in Kansas City. RHP Phillip Humber, who starts Friday for the White Sox, pitched last year for the Royals, going 2-1 in eight games, but only one start. RHP Felipe Paulino, who allowed two hits and two runs in seven innings in beating Seattle 4-2 on Saturday, will start for the Royals.