I'm not sure if this has been addressed.
"Smart doorbells" are expensive, and typically require some webs service.
My solution: the Insteon Trigger Link, which I have used for doors and occupancy detection for ages, are easily hackable into insteon-enabled doorbells.
1) Buy a Trigger Link and a cheap wireless doorbell button.
2) Take out any led in the doorbell button, as it creates problems that I don't have the techincal know-how to explain
3) open up your Trigger Link
4) connect two small wires (I used a twisted pair form some cat6) to the two screw-down terminals in the Trigger Link, and to the two screws in the wireless doorbell.
5) Make a Trigger Link device
Now, by pressing the doorbell button, Indigo will know via the Trigger Link
I have it announce visitors using my UK English speaking Mac (whom I call Jarvis) when my home is occupied. It randomizes possible spoken notifications (e.g. "We have a guest", "A visitor is at the door", etc)
If somebody is not home (I put together occupancy detection using fingscan and event scritps), I plan to have Indigo play random .mp3's of large dogs barking
Enjoy, the whole shebang is under $50, and you can easily have a camera activate, a Growl alert on your phone, or other ways to greet the person at the door using IP cameras