Create a person if no duplicate exists
To me it looks like you should move the if (result) into each one of  promptUserToPickFromDuplicatePersons, selectPersonFromDuplicatePersonLookup and addAsParticipant and add a method:

function handleError(e( {
    console.log(e.stack);
    return self.createOdsPerson()
           .then(self.addAsParticipant.bind(self, redirect));
}


Then you can rewrite the code as:

self.getPotentialPersonDuplicates()
  .then(promptUserToPickFromDuplicatePersons)
  .then(selectPersonFromDuplicatePersonLookup)
  .then(addAsParticipant )
  .catch(handleError)
  .then($ui.stopWaiting);


You could also look at the Bluebird promise library