See: http://drupal.org/node/342748

diff -Nurp ../phone.orig/phone.module ./phone.module
--- ../phone.orig/phone.module	2010-04-28 09:07:54.000000000 -0500
+++ ./phone.module	2010-04-28 09:29:25.000000000 -0500
@@ -668,12 +668,25 @@ function phone_widget_info() {
 function phone_widget_settings($op, $widget) {
   switch ($op) {
     case 'form':
+      $form = array();
+
+      $size = (isset($widget['size']) && is_numeric($widget['size'])) ? $widget['size'] : 60;
+
+      $form['input']['size'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Size of textfield'),
+        '#default_value' => $size,
+        '#element_validate' => array('_element_validate_integer_positive'),
+        '#required' => TRUE,
+      );
+
+      return $form;
 
     case 'validate':
       break; //do nothing
 
     case 'save':
-      return array();
+      return array('size');
   }
 }
 
@@ -788,6 +801,7 @@ function phone_textfield_process($elemen
   $element[$field_key] = array(
     '#type' => 'textfield',
     '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL,
+    '#size' => !empty($field['widget']['size']) ? $field['widget']['size'] : 60,
     '#autocomplete_path' => FALSE,
     // The following values were set by the content module and need
     // to be passed down to the nested element.
