I read that Pardot syncs Prospects with Salesforce in this way:
if it finds a Lead with the Prospect email address in SF, it will sync with that lead.
If it cannot find a lead, but it can find a Contact with the Prospect email address, it will sync with that contact.
If no lead or contact is found, then create a new Lead.
That's fine, but when I go to Pardot and I check the Prospect field mappings under the Admin section, then for any field I can only select one field, where I would expect I could select a field for Lead and a field for Contact.
If you're using a custom field in Salesforce on both leads and contacts, we pull the name of the Salesforce field from the contact field ID.
We recommend that each Salesforce custom field you map has its own unique API name as Pardot will not respect case sensitivity when syncing. For example if you have two separate fields called "hair_color" and "HAIR_COLOR," Pardot will not recognize the difference in capitalization and will only sync with one of the two fields.
From my comment above:
It uses the field API Name. If you have a field on the Lead table and a field on the Contact table with the same API name, it assumes those two fields should sync. If you have two fields you wish to pass converted information to, they must have the same API name. lead.email_2__c would not sync to contact.secondary_email__c unless you update the API name on one of them.
Pardot default fields are both present in Leads and Contacts. Pardot chooses to sync prospect default fields depending on the availability of a lead or contact based on the prospect's email address (Contact wins when they are both present). Basically, you can't influence that through field mapping in the Salesforce connector.