<p>I would like to be able to add custom commands/script to be executed during a print.</p>

<p>For example I would like to write some software to take a picture check the print hasn't moved off the bead between layers. </p>

<p>Does anyone know if any of the available software/firmware allows custom scripts or calling back to the computer before continuing printing?</p>

<p>I am happy to build/buy a new printer if anyone knows a control board that has this sort of feature. </p>

One of the solutions could be adding a layer change script (simplifi3d has that out of the  box) and then using marlin firmware you could set a value to digital pin that could triger external actions.
Layer Change G-Code
: I personally haven't had to use this, but I'm
  sure that there are some excellent reasons/ideas to use for this. If
  you'd like for a G-Code script to be inserted in-between each layer,
  than you can simply place it in this tab. One interesting use of this,
  is for the FlashForge Dreamer, to have the lights blink in between
  each layer, however that can be a bit too much at times!
The syntax for the M42 command is: M42 S(value to be written to pin) P (pin number) e.g. To set digital pin 30 high, you would use M42 S1 P30
The MARLIN firmware will
not enable you to change the status / write
  values to any of the pins in use for things such as the heaters,
  thermistors, end stops etc. The command will let you send values other
  than 0 and 1 to any pins which can output analogue values. (0-255)