How to import nodes with custom fields using Feeds module and Feeds JSONPath Parser
There are 3 places where the problem could lie:


Data not being correctly parsed by feeds
Data not being correctly saved by feeds
Problem with the field definition itself


Number 3 is ruled out since fields save correctly via the UI.

Troubleshooting Number 1.

Add a hook_feeds_after_parse to your module and either step through with a debugger or dump the $items array to the dblog:

function mymodule_feeds_after_parse(FeedsSource $source, FeedsParserResult $result) {
  if($source-&gt;id == 'ENTER YOUR SOURCE ID HERE') {
    watchdog('My Module', '&lt;pre&gt;' . print_r($result-&gt;items, TRUE) . '&lt;/pre&gt;');
  }
}


Question: is there a value in the items array for your engine field?

If no: there is a problem in the JSON parser definitions and feeds is not extracting the data correctly.

If yes: if the information exists that you require, i.e. every sub field value exists then the problem is not with the feeds parsing.

Troubleshooting Number 2

This points to an issue with your implementation of hook_feeds_processor_targets_alter.  Most likely, the data is not in the correct format for saving.  Add some watchdog statements in this function to determine:


Is the callback being fired?
If the callback is being fired then there is an issue with your hook_feeds_set_target implementation.  It isn't providing the correct data format to allow the field to be saved.  You could add a dpm() statement to hook_node_update and then save a node via the UI. This will show the correct format.