Wendy,
The first way I thought about doing this is with a batch program that runs every night/morning. Those batch programs allow you to check dates against "today". But that still leaves you with the problem that the birthday will never be "today". If the month and day are the same, it will be some multiple of years away.
That means that you need to set up some logic that can understand that today is an anniversary of a birthday. Marketo doesn't give you the flexibility to do that type of calculation, but you could do it in SFDC with a formula the sets a flag on the date of the birthday. The formula would look at the current date and the birthday stored, break out the month and day for each, and if finding a match could set custom field value to true or false.
Then all you would need to do is trigger off of the field change in either a smart campaign or a batch campaign in Marketo.
Perhaps there is a more elegant way to do this, but it is late on a Friday and my mind isn't probably working as clearly as it could.
Best,
-Pam