Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.938
diff -u -p -r1.938 common.inc
--- includes/common.inc	22 Jul 2009 04:45:35 -0000	1.938
+++ includes/common.inc	22 Jul 2009 23:44:54 -0000
@@ -3978,6 +3978,8 @@ function element_info($type) {
         $cache[$element_type]['#type'] = $element_type;
       }
     }
+    // Allow modules to alter the element type defaults.
+    drupal_alter('element_info', $cache);
   }
 
   return $cache[$type];
Index: modules/system/system.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.api.php,v
retrieving revision 1.49
diff -u -p -r1.49 system.api.php
--- modules/system/system.api.php	15 Jul 2009 02:08:41 -0000	1.49
+++ modules/system/system.api.php	22 Jul 2009 23:42:47 -0000
@@ -116,6 +116,24 @@ function hook_elements() {
 }
 
 /**
+ * Alter the element type information returned from modules.
+ *
+ * A module may implement this hook in order to alter the element type defaults
+ * defined by a module.
+ *
+ * @param &$type
+ *   All element type defaults as collected by hook_elements().
+ *
+ * @see hook_elements()
+ */
+function hook_element_info_alter(&$type) {
+  // Decrease the default size of textfields.
+  if (isset($type['textfield']['#size'])) {
+    $type['textfield']['#size'] = 40;
+  }
+}
+
+/**
  * Perform cleanup tasks.
  *
  * This hook is run at the end of each page request. It is often used for
