I am not sure if this is a bug or not but you can enter .
or 0
into the price field then in your template you would need to do something along the lines of:
{if price_val == 0}
Price: <input type="text" name="price" value="" >
<input type="hidden" id="item_qty" name="item_qty" value="1" />
{if:else}
{price}
<input type="text" id="item_qty" name="item_qty" value="{min_order_qty}" />
{/if}
Ideally you would have any item where a user can enter their own price in a particulate channel since it could allow technically savvy users to adjust the price of items where you have set the price. In that case you could then use a conditional on the channel instead of relying on the price for the conditional.
{if channel == "donations"}
Price: <input type="text" name="price" value="" >
<input type="hidden" id="item_qty" name="item_qty" value="1" />
{if:else}
Your normal markup
{/if}