There are no formal rules for deprecating functions, although if other packages depend on your package and you break them, CRAN may be upset. In terms of best practice the folks at Bioconductor provide some nice guidelines that I try to follow whenever possible.
To answer your question "Is three months enough", I think it depends on how many people will be affected. If it is a very popular package and you've just broken everyone's code, three months sounds a bit short. If only a few people use it in a niche area, then perhaps three months is OK.
Personally, I would go for at least six months if there's not a pressing reason for removal (e.g. broken API).