Terms were undisclosed, but FOXSports.com reported the deal to be worth $18 million.
Buck is coming off a breakout year in his first season with the Blue Jays, one that saw him make the American League All-Star team for the first time and set career highs in batting average (.281), on-base percentage (.314), homers (20) and RBIs (66). While starting 104 games behind the plate, the 30-year-old threw out 28 percent of would-be basestealers.
Buck, a right-handed hitter who spent his previous six seasons with the Royals and made $2 million in 2010, sports a career .243 batting average and a .301 on-base percentage.
The Marlins went into this offseason actively pursuing catching help, with John Baker coming off Tommy John surgery and Ronny Paulino being suspended 50 games for performance-enhancing substances late last season.