Assume the answer -- at least one answer -- is to create two integer fields and add some instructive text/egs/code on the form to show/force how to correctly fill in the fields, but. Mailchimp, for example, has a birthday field type.
Also, trying to wrap my head around how you'd automate a birthday message if you have two custom fields.
If ultimately you just want to email people on their birthday, you can try using advanced wait + date token + next anniversary. Have 2 campaigns requesting each other so it becomes perpetual (a campaign can't request itself). To start someone off on the emails you may use a Data value changes trigger and Date of Birth is not empty.
Jay outlines perfectly why the Date datatype has special power in Marketo that you wouldn't be able to replicate any other way.
If what you're actually trying to do is offer somebody a friendly form (where they don't feel the intrusion of telling you their age ) you can do that by using 2 auxiliary fields on the form.
Technically, as you know from past work, you don't even need to create those fields in Marketo, but for simplicity's sake let's assume you have the 2 custom Integer fields MonthofBirth and DayofBirth in Marketo and on the form (as dropdowns or text fields or whatever).
Then in onSubmit, assemble the DateofBirth as a hidden field, with year 1000 as a placeholder:
var currentValues = form.getValues();
return ("0" + currentValues[field]).slice(-2);
This allows you to use the usual anniversary logic as the field is stored as a Date.
You got it, Sanford -- politeness is where it's at. Good call on the hidden field attribute/aux fields approach. Appreciate the insight.