Question: I am currently hosting several cloud storage buckets with archived data for some of my clients.
For one client I would like to transfer the ownership and subsequent billing of multiple storage buckets to that client, but continue to administer them myself.

The buckets in question are already in their own (the clients name) project, but the are all hosted within my company domain.

How would I go about that transfer? Does my client need to create their own company domain and I then somehow transfer the project to them? Or do they get user access within my company domain and get a separate billing instance within my company domain?

It all a bit confusing to me.

Answer: 
Buckets are owned by the Project ID. Objects within the bucket are owned by the IAM Member ID that created the objects.

Billing for buckets is controlled by the Project ID. If the customer already owns the project (which can be changed), all you need to do is change the billing account for the project.

You can continue to have access by granting your IAM Member ID access to the bucket and its objects.

Access to a bucket and its contents via a domain name is not a Cloud Storage issue. This is controlled via the HTTP(S) Load Balancer. You can domain transfer the domain to the customer via normal registrar transfer procedures. Ownership of the domain will not affect the load balancer. The project that owns the load balancer will, so you may need to recreate it to transfer billing responsibility.
To disattach this project from your organization, you need to check that the project is in compliance with this [document](https://cloud.google.com/resource-manager/docs/project-migration) after that is necessary to file a case with support.

when the project is disattached from an organization, the billing account for this project is deleted and your customer need to a billing account in order to attach it to the project that has the buckets.

A billing account is created when a GCP project is created and upgraded(non free trial project)

And Complementing the answer from @JohnHanley is necessary to change the billing account in the customer project, this change must be performed by a user with this permissions.

Project Owner or Project Billing Manager on the project, AND Billing Account Administrator or Billing Account User for the target Cloud Billing Account.

you can find more information on this [link](https://cloud.google.com/billing/docs/how-to/modify-project)

Keep in mind that is not possible to transfer a bucket from one project to another or from a domain to another domain, you must copy the contents of the existing bucket to a new bucket that belongs to your customer's project.

This action need to be executed by an user that has access to read and write objects over the 2 buckets (source & target)