Add to cart form, change output - separating attributes from buy button

This one was not easy. Changing product display, which is node is possible in different ways, but then you have a field_product_reference, which outputs buy button and attributes buttons. So you moved around price in your node template, body/description etc, but you want to separate attributes changing widget and buy. You just can't. Even if you change data in template, as it is using Ajax to refresh on clicking of any attributes. So you will lose your changes, made in template, or any other place you maybe found. Only place you can do this is in hook_form_commerce_cart_add_to_cart_form_alter. Which will be run on ANY refresh of cart with AJAX. Problem with this form is that it has only &$form, &$form_state and in this you dont have data from product display, your node. So you can only combine data from product, which could be enough, but in my case I needed also a BODY field from node. Which I couldnt get from this above. Luckly there is context in this form, so I loaded node with that value and then I attached it to #attributes, which made it position right after attributes DIV, which was exacty on the spot where I wanted it to be.

$nodeview = node_load( $form_state['context']['entity_id']);
$form['attributes']['#suffix'] .= '<div class="body">' . render(field_view_field('node', $nodeview, 'body','teaser')) . '</div>';