Make config for un-used resources optional
Please consider my final comments especially around extracting resource requirements out of the validation step and having it be testable.
I'm also very interesting in seeing this change reflected in documentation and examples, but we can do that later. I'd love to get this out ASAP (esp before this week's release) so we can feedback from users (bob from goodeggs and Steve Pletcher come immediately to mind here). I think, similar to Sandy's typing change, we should announce this in #general.
I'll let the explicitly listed reviewers do the actual accept
You might want to consider having resource_reqs determination outside of this function totally. This feels like "complecting" two separate operations.
I think a helper function that gathers all the required_resource_keys for a particular pipeline, mode tuple would be useful to have around that then you could compute the dictionary with a single for loop in its own function. This could also be tested independently
this is standard for mypy typing of things that are runtime circular deps 
yea the tricky bit is that as we traverse through the definition structure here we throw error messages that detail what is requiring the resource that is missing. I think the detailed error message are worth it, which makes refactoring for speculative re-use less clear. My best guess is its this shared traversal function with gathering & validating gated by some argument to allow for other uses.