A) You register the name with a registrar, once that is done you can host it elsewhere. There are a variety of ways to accomplish that, the simplest and most direct is to log in to the registrars site and change the "nameservers" for the domain to the nameservers of the host. Dreamhost's nameservers are ns1.dreamhost.com, ns2.dreamhost.com, ns3.dreamhost.com. With ANY DNS change, and this is a DNS change, you will not get instant joy. There is a delay as your change propagates to nameservers around the world, since namesevers cache entries rather than look them up at host every time, this delay will be anywhere from a few minutes to 24 hours (maybe longer world-wide). Also not every nameserver gets the change at the same moment, so it's possible your phone will get it sooner than your PC or vice versa.
B) Yes. There is no downside to have a different registrar. In fact some developers prefer to have there registrar separate so that if the host becomes completely inoperable they can log into the registrar and change the nameservers to a different host.
C) The basic procedure is log into godaddy and change the nameservers as discussed in A above. Basically you register the domain, and changing the nameservers says "Dreamhost's nameserver is the master record for this domain" and "fully hosted" is what you want on the dreamhost side.
D) Dreamhost basically charges you 9.95 per year per domain to renew the domain, so that is an annual charge.
To TRANSFER the domain is a one-time charge, of 9.95 but that also EXTENDS the expiration by one year at the time of transfer. Although the transfer fee is a "one time" fee, it's also renewing it for a year. Net result is there is no penalty for transferring.