Delete all records in tables with reference to another reference
You just have to traverse the relationship backwards, deleting from the last child first, then the next child, and so on.

Let's say you want to delete all the data for a specific customer, you could have this procedure:

CREATE PROCEDURE dbo.ObliterateACustomer
  @delete_me int
AS
BEGIN
  SET NOCOUNT ON;

  DELETE dbo.customer_contact_phone 
    WHERE contact_id IN
    (
       SELECT contact_id 
         FROM dbo.customer_contact 
         WHERE customer_id = @delete_me
    );

  DELETE dbo.customer_contact WHERE customer_id = @delete_me;

  DELETE dbo.customer_address WHERE customer_id = @delete_me;

  DELETE dbo.customer WHERE customer_id = @delete_me;
END
GO


For the delete from a relation, there are several ways to do it. IN is arguably the most straightforward, but you can also delete from a join:

DELETE p
FROM dbo.customer_contact_phone AS p
INNER JOIN dbo.customer_contact AS c
  ON c.contact_id = p.contact_id
  WHERE c.customer_id = @delete_me;


Or using EXISTS:

DELETE p
FROM dbo.customer_contact_phone AS p
WHERE EXISTS
(
  SELECT 1 FROM dbo.customer_contact AS c
  WHERE c.contact_id = p.contact_id
    AND c.customer_id = @delete_me
);


You could even use MERGE, but I'm not going to show you how, because I think it's often a terrible idea. :-)