Garon spent his junior career with the Victoriaville Tigres of the Quebec Major Junior Hockey League (QMJHL). In three seasons with the Tigres, Garon posted a 74–63–5 record. At the conclusion of the 1997–98 season, the last of his junior career, he won the Jacques Plante Memorial Trophy as the best goaltender in the QMJHL and was named to the QMJHL First All-Star Team. He was also named CHL Goaltender of the Year as the top goalie in Canadian major-junior hockey and to the CHL First All-Star team. Garon also played for Team Canada at the 1998 World Junior Championships in Finland when Canada finished eighth behind Kazakhstan.
After being drafted by the Canadiens in the second round in 1996, Garon spent the first five seasons of his professional career playing primarily with the Canadiens' American Hockey League (AHL) affiliates, which included the Fredericton Canadiens, the Quebec Citadelles, and the Hamilton Bulldogs. He was called up for brief stints with the Canadiens before he won the full-time back-up job with the team for the 2003–04 season. Garon played 19 games behind José Théodore that season, posting an 8–6–2 record, a 2.27 goals against average (GAA) and .921 save percentage.
In the summer of 2004 Garon was traded with a third-round draft pick to the Los Angeles Kings for Radek Bonk and Cristobal Huet. During the 2004–05 NHL lockout he played with the Kings' AHL affiliate, the Manchester Monarchs, posting an impressive 32–14–4 record, 2.12 GAA, .927 save percentage and 8 shutouts. This helped earn him the starting job with the Kings when NHL play resumed for the 2005–06 season. However, Garon struggled in the number one role and was relegated to the back-up position for the 2006–07 season.
Following the 2006–07 season, Garon became an unrestricted free agent and on July 3, 2007, signed a two-year, $2.2 million contract with the Edmonton Oilers. Garon split time with incumbent starter Dwayne Roloson and his strong play earned him 47 appearances through which he posted a 2.66 GAA, .913 save percentage, and 4 shutouts. Despite his efforts, the Oilers failed to qualify for the playoffs. However, Garon earned praise for going a perfect 10–0 in shootouts that season, stopping a remarkable 30 of 32 shot attempts in the process.
Garon was named to Canada's roster for the 2008 IIHF World Championship in Quebec City and Halifax, although he did not receive any playing time behind Cam Ward and Pascal Leclaire as Canada won the silver medal.
Roloson re-emerged as Edmonton's undisputed starter in 2008–09 and on January 17, 2009 Garon was traded to the Pittsburgh Penguins in exchange for Ryan Stone, Dany Sabourin, and the Penguins' fourth-round pick in the 2011 NHL draft. Garon saw limited action behind starter Marc-André Fleury, who backstopped the Penguins to their third Stanley Cup championship, defeating the Detroit Red Wings in a seven-game rematch of the previous year's final. Garon's only appearance in the playoffs came in game five of the finals in relief of Fleury.
On July 1, 2009, Garon again became an unrestricted free agent and signed a two-year deal with the Columbus Blue Jackets, worth $1.2 million per season. In his first season with the Blue Jackets, Garon appeared in 35 games and posted a 12–9–6 record backing-up Steve Mason, the winner of the 2009 Calder Memorial Trophy.
Garon signed a two-year/$2.6 million contract with the Tampa Bay Lightning on July 1, 2011. This makes the second team in which both Garon and fellow goaltender Dwayne Roloson play for the same team (the first being Edmonton).
Due to lack of interest from NHL teams in the offseason, Garon pursued a career in the KHL, signing with the Avangard Omsk.