Butler played high school hockey in St. Louis for Chaminade College Prep., one season in Junior B followed by two seasons with the Sioux City Musketeers of the United States Hockey League. He led the Musketeers with a +36 plus-minus rating in 2004–05, played in the league's All-Star Game and was named to the first All-Star team following the season. He was then selected by the Buffalo Sabres, 96th overall, in the 2005 NHL Entry Draft but first committed to attend and play hockey at the University of Denver. In his first season with the Denver Pioneers, Butler was selected to join the United States junior team at the 2006 World Junior Ice Hockey Championships. He played four games for the fourth place Americans. Butler spent three seasons with the Pioneers, scoring 20 goals and 66 points in that time. He was the team's assistant captain in 2007–08 and was considered the team's top defenseman while being named an All-American. Butler left the Pioneers following his junior season, signing an entry-level contract with the Sabres.
Professional
Butler began the 2008–09 season with the Sabres' AHL affiliate, the Portland Pirates. He appeared in 27 games for the Pirates and scored 12 points when he was recalled to Buffalo on December 18, 2008. He made his NHL debut the following night against the Los Angeles Kings, a 5–0 victory in which he scored his first NHL point with an assist on a goal by Adam Mair. He scored his first goal on March 20, 2009, against Martin Biron of the Philadelphia Flyers. Butler appeared in 47 games for the Sabres in his rookie season, scoring two goals and four assists. An ankle injury forced Butler out of the Sabres' lineup for 12 games in 2009–10, but he posted improved offensive numbers, scoring 21 points in 59 games. Still, he found himself marginalized by the Sabres late in the season, and stated himself that he lacked consistency in his play in 2010–11. He appeared in 49 games for the Sabres, and while his offensive production dropped to nine points, he improved his plus-minus to +8 after finishing −15 the year previous. Following the season, however, Butler was packaged in a deal that saw him dealt to the Calgary Flames along with Paul Byron on June 25, 2011, in exchange for Robyn Regehr, Ales Kotalik and a second round pick in the 2012 NHL Entry Draft. The Flames quickly signed him to a two-year, US$2.5 million contract. During his tenure with the Flames, Butler tied a dubious plus-minus record, finishing -7 during a January 5, 2012 game against the Boston Bruins. On July 16, 2014, Butler signed as a free agent to a one-year, two-way contract with the hometown club, the St. Louis Blues. On July 1, 2015, Butler re-signed with the Blues on a one-year, one-way contract worth $675,000. Butler familiarly agree to remain with the Blues to following season, agreeing in free agency to return for a third season on July 2, 2016. In his fifth season within the Blues organization in the 2018–19 season, Butler continued as a veteran presence in the AHL while splitting the year between the San Antonio Rampage and the Blues. He made 13 regular season appearances with St. Louis, contributing with 1 goal and 2 points. He was a part of the extended playoff squad for the Blues, and as a part of the Blues first Stanley Cup championship he skated with cup following the Stanley Cup FinalsGame 7 victory over the Boston Bruins. On July 3, 2019, Butler reportedly retired from hockey after 11 professional seasons.