I have created an account on checkappointments.com to check how it works. One important information is that there is no limit to how many dates user can schedule working hours for. In the same time, most doctors work on weekly basis, so week to week the schedule does not change much. I would suggest then setting up a standard weekly calendar first, and then add a possibility to manually override the settings.
It may be good to consider also a situation where the schedule does not change from day to day. This information can be also propagated automatically to other days, once user fills in the first one.
It's also worth considering to simplify time entering to using just numbers, so that user does not need to enter ":". The "minutes" field could be filled in automatically with "00", as this is what I think will be most popular choice.
So, here comes the wireframe:
Update: This is an updated wireframe, with a possibility to add multiple time slots per day (based on a comment below my answer). Previous version here:
Btw, for "daily" only one row should be displayed in the "Set up default schedule" tab, without day name. And accordingly: 14 rows for bi-weekly. Regarding the "Set up specific dates" tab, there is also an option to go for calendar-like view, something like you have e.g. on Google Calendar. In my solution, past dates are hidden, as they would clutter the interface pretty much, and are not important regarding scheduling future availability. Still, user can go back to see the history.