The 36-year-old third baseman reportedly had been courted by several other teams but decided to return to Arizona on a one-year deal. Chavez has had his home in nearby Scottsdale for several years.
Chavez hit .281 with nine home runs last season. Although he played in only 80 games, his 44 RBIs were fourth-most on the team and his highest total since 2007. It was his first year in the National League after 15 major league seasons in the AL with Oakland and the New York Yankees, although he played in only 31 games combined in 2008 and 2009 because of shoulder and back injuries.
He had a pair of stints on the disabled list last season, first with a right oblique strain, then with a strained left knee.
A six-time Gold Glove player early in his career with Oakland, Chavez is expected to back up Martin Prado at third and be available as a left-handed pinch hitter. The Diamondbacks traded young third baseman Matt Davidson to the Chicago White Sox earlier this week for closer Addison Reed.
Chavez, a popular player in the clubhouse, is a career .268 hitter with 257 home runs and 894 RBIs in 1,571 games.
He played the 2013 season on a one-year, $3 million contract. In an interview in September, he talked about wanting to stay with the Diamondbacks.
"They know I like it here," Chavez told The Arizona Republic then. "This is home, my kids are here, spring training's five minutes from my house. It's a given that I would want to come back."
Chavez was the 10th overall pick in the first round -- by Oakland -- in the 1996 draft.
The agreement was first reported by CBSSports.com.