***CORRECTED***
No, I'll try to explain briefly the basic mechanism:
On item-post and item-edit code an empty div "plugin-hook" is inserted from the beginning. That div will be filled (via an an Ajax call) only when you select or change Category. It will contain both custom fields and any contents your active plugins need to add there.
So, to avoid modification in core files (that manage that Ajax call), you need to do this on the client side using Javascript. For that, a couple of hooks can be used. This should work:
Add this at the very bottom of your theme functions.php (take care not to leave blank lines after this):
<?php
function cust_move_custom_attributes() { ?>
<script type="text/javascript">
$("#plugin-hook").change(function(){
$("<div></div>").attr('id', 'moved_custom_attributes').insertAfter($("input#price").parent("div.controls"));
$("#moved_custom_attributes").append($("#custom_attributes"));
});
</script>
<?php }
$section = Rewrite::newInstance()->get_section();
if ($section == 'item_add' || $section == 'item_edit') osc_add_hook('footer', 'cust_move_custom_attributes');
function cust_trigger_plugin_hook() { ?>
<script type="text/javascript">
$("#moved_custom_attributes").remove();
$("#plugin-hook").change();
</script>
<?php }
osc_add_hook('item_form', 'cust_trigger_plugin_hook', '6');
osc_add_hook('item_edit', 'cust_trigger_plugin_hook', '6');
?>
Regards