Creating programatically a node that has a programtically created image field that should stay empty
I think this is already been covered here some where but i'll answer this any way because creating fields manually is not something easy.

Let's start:
1. First thing - create the field through the UI
2. Export the fields with features. In the latest version of features, features devide the export to to diffrent things: file with all the fileds settings and a file with all the field instances. From the settings of the field that features create you need only the settings: cardinality, field name, module and settings. From the instance you will need the settings: label, required and the widget. You can save them to a function.


After you saved the settings you will need to use a couple of functions for next you will install your module or anything like this: field_info_field(), this function will let return you the settings of the field if he exists, if not you will need to create it with the function field_create_field() like this:

field_create_field($field_config);


The argument you'll need to give her is the settings of the field you saved later. For attaching the field to an entity you'll need to use the function field_create_instance that get the instance settings you save with three more keys: 


field_name - the name of the field
bundle - node type, message type etc. etc, 
entity_type - the entity type: node, comment, message etc. etc.


You can see here hot it's done:

// This is the instance settings you saved.
$instance;
$instance += array(
  'field_name' =&gt; $field_config['field_name'],
  'bundle' =&gt; 'article',
  'entity_type' =&gt; 'node',
);

field_create_instance($instance);


You can have a look in the module OG in the function og_create_field() and how he saved fields inside hook. This could very easy and other module you will wrote can be based on this if you have a very a lot of fields.