I agree with "Spec" part, but this was an interview question. I am not sure what interviewer was expecting in the answer. It would be helpful to see how people approach the reply to this interview question as if it were during the interview.
As for the assumption, I assumed there are 3 inputs for each coin, which will be asserted for 1 clock cycle after coin has been inserted. Even though the interviewer asked for a single item, I still think we will need item select switch. Item will not be release if this switch is not pressed even after total value exceeds 40cent . If the user does not want the item and want the money back, simply press the cancel switch. In that case, all the inserted coin will be returned. If the user press the item select switch without having 40 cent in the machine, the error is asserted which can be used to display " not sufficient fund". For change return, it was assumed that to return nickel, dime and quarter, COIN_O[0],COIN_O[1] and COIN_O[2] need to be asserted for 1 clk cycle respectively. The product will be released when VEND_O is asserted for 1 clk cycle. I know there are many more requirements or "spec" for complete design like response delay and fault tolerant but during interview process, to simplify you can reply without those constraints. I have shown my module description below:
module vending_top(
input CLK_I,
input RST_N_I,
input NICKEL_I,
input DIME_I,
input QUARTER_I,
input SEL_ITEM_I,
input CANCEL_I,
output VEND_O,
output [2:0] COIN_O,
output ERROR_O);