Current Situation
The Heroku Cron add-on was disabled in June 2012 and existing users were migrated to the Scheduler add-on. According to Heroku, the new add-on is "superior" and should be preferred over a cronjob.
I don't know what Heroku's definition of "superior" is; the new add-on might be better integrated into the Heroku stack and more reliable, but from a user / feature perspective the Scheduler add-on is obviously much less powerful than a cronjob. The main reason for this is that jobs can only be scheduled at three pre-defined intervals: Daily, Hourly or Every 10 Minutes.
I'm currently working on a project where I absolutely need weekly and monthly intervals. And the Scheduler needs to be a dyno task, not a callback URL as supported by the Temporize Scheduler.
There's also a feature request for custom frequencies on getsatisfaction since January, but unfortunately it hasn't been replied to yet.
The Workaround
Thanks to a nice StackOverflow answer I found a workaround to this problem: Simply "protect" a daily task using a bash if-statement. Some examples:
Run a task every Monday:
if [ "$(date +%u)" = 1 ]; then MY_COMMAND; fi
Run a task every 1st day in a month:
if [ "$(date +%d)" = 01 ]; then MY_COMMAND; fi
You could also run a job every year on December 24th:
if [ "$(date +%m)" = 12 ] && [ "$(date +%d)" = 24 ]; then MY_COMMAND; fi
I think that's currently the best solution to work around this issue, much better than hardcoding weekdays in the scheduled script.