The method name itself is a bit confusing to me as well.  I don't consider it a recurring contract unless it's like a subscription or something along those lines.  

The point of this is so that if a user wants to remove the card from being reused you pass the card object to this method correct?  Perhaps it should be something more like remove_customer_profile_association or something like that.  That's just getting to be a bit nit picky though, but may want to clarify a bit more what it does.  

Since the `gateway_customer_profile_id` is `nil` on non payment profile gateways I think it would be safe to just implement the `source.update_column :gateway_customer_profile_id, nil` here and then you could just raise an error if you attempted to call this method on a gateway that doesn't support it to begin with or fail silently...  Unless something is being set in gateway_customer_profile_id for non profile supported gateways.  It's been so long since I worked with them I forget, but I don't think there is anything set there anyways so seems harmless to me.