One way to go would be to use three versions of the Register snippet, one for each group, and put each one on a separate registration page.
It might make it easier to know that protecting/hiding pages and registering the users are two completely independent processes.
The registration process is just about getting the users registered in the right User Groups and nothing else.
Determining which pages they can see is done in Resource Group Access ACL entries, which connect User Groups to Resource Groups to allow users in a User Group access to resources in a Resource Group. It has nothing to do with registration.
You shouldn't need to worry about controlling access to the pages until after you can successfully register users into the Patients, Doctors, and Guests user groups, and once the registration part is done, the rest is relatively straightforward. You may want to just have two groups, Patients and Doctors, and let non-logged in users be Guests. Not-logged-in users are automatically members of the Anonymous User Group, so that would work fine, unless you have pages that Guests should see, but not-logged-in users shouldn't.
You might also look at the Subscribe extra (
http://bobsguides.com/subscribe-tutorial.html), which will manage user registration and putting the users into groups for you. Again, I think you'll need three separate registration pages, one for each group, but there won't be anything on them but the Subscribe snippet tag with the appropriate properties set.
You can see Subscribe in action at Bob's Guides (see my sig.). It also lets users select their interests. That's optional, but you might want to do it. Feel free to register yourself there.