Along the lines of:
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.0.0.0-->
<commandGroup open="True" name="Mad libs" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="333" name="Let's play madlibs" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Great! Let's play mad libs. Please give me a noun.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Let's play a game</phrase>
</command>
<command id="380" name="++My noun is {1}" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Where I use {var.noun} here you could also use {1}, but this way you have confirmation that the variable was stored.">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{PreviousSpoken}&&skip the noun</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>noun</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Okay, we'll skip the noun.|Fine, let's move on.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>noun</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>OK, your noun is {var.noun}.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Now, let's have an adjective.|Next, please give me an adjective.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>My noun is, skip the noun</phrase>
<payloadDictation>payloadDictation: Regular</payloadDictation>
</command>
<command id="393" name="++My adjective is {1}" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Where I use {var.adjective} you could also use {1}, but this way you have confirmation that the variable was stored.">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{PreviousSpoken}&&skip the adjective</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>adjective</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Okay, we'll skip the adjective.|Fine, let's move on.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>adjective</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>OK, your adjective is {var.adjective}.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Now, let's have a verb.|Next up, a verb please.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>My adjective is, skip the adjective</phrase>
<payloadDictation>payloadDictation: Regular</payloadDictation>
</command>
<command id="397" name="++My verb is {1}" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{PreviousSpoken}&&skip the verb</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>verb</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Okay, we'll skip the verb.| Fine, let's move on.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>verb</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>OK, your verb is {var.verb}.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>How about an adverb.|Next up, an adverb.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>My verb is, skip the verb</phrase>
<payloadDictation>payloadDictation: Regular</payloadDictation>
</command>
</commandGroup>
Above I follow your script. Each grammar part requires confirmation, which means that my logic block needs to use the variable {PreviousSpoken} rather than {LastSpoken}, since the last phrase spoken is my confirmation.
The computer poses the question at the end of the command that precedes it. You don't need to use any triggers, actually. But you'll need to be thoughtful in creating your phrases. For example, doing it this way, we can't just use "Skip it" as a phrase for all the commands since each command needs unique phrases. Instead, we use "Skip the noun", "Skip the adjective", etc.
[IMPORTANT EDIT: I just remembered that one can run into problems when chaining commands that require confirmation. I've edited the xml above to hopefully handle that. It requires threading.]