> Wait, how is that not covered by .bool_set:N and .bool_set_inverse:N?
> Doing " turnfooingon .bool_set:N = \l_mymodule_fooing_bool " and "
> turnfooingoff .bool_set_inverse:N = \l_mymodule_fooing_bool " allows the
> user to use the keys turnfooingon and turnfooingoff as you describe.  Well, it
> also allows the user to do weirder things like "turnfooingoff=false" to turn
> fooing on.
> Bruno

You're totally right: it is. I think I let my mind wander a bit when I was 
writing the example... What's actually at issue is whether constructions 
along the lines of
    \mymoduledoclevelsetup{ fooing = activate }
    \mymoduledoclevelsetup{ fooing = deactivate }

should be tacitly encouraged by making

    \keys_define:nn { mymodule }
        fooing              .choice: ,
        fooing/ activate    .bool_set_true:N  = \l_mymodule_fooing_bool ,
        fooing / deactivate .bool_set_false:N = \l_mymodule_fooing_bool

available out of the box, or whether it's better to leave it to package 
authors to use .code:n or some such alternative if they want to get 
this behaviour.