Drupal Association members fund grants that make connections all over the world.
When Phone processes an individual form element in phone_element_process($element, &$form_state, $form), it blows away any existing stuff stored in the $element variable.
This specifically breaks compatibility with the field_placeholder module, which adds an HTML5 placeholder attribute to the element. Field_placeholder adds the attribute in a form_alter hook that gets run before phone_element_process():
$element[$placeholder]['#attributes']['placeholder'] = check_plain($instance['placeholder']); // where $placeholder = 'number'
So when Phone processes the field it replaces whatever was inside the element with its own attributes:
$element['number'] = array( ... );
A good way to handle this is seen in Drupal's core text module by doing an array union with whatever is already there like so:
$element['number'] = $element['number'] + array( ... );
Of course since we're referencing an array element we should ensure ahead of time that $element['number'] will be set.