unexpected "REQUIRED" argument forwarded by `find_dependency`

This question is related to this one.

I decided to track what happened exactly when resolving a dependency chain.

I set 3 projects A, B and C.
B depends privately on C and does find_package(C <REQUIRED>).
A depends privately on B and does find_package(B REQUIRED).

All of them are using the following trivial macro:

macro(find_package)
	message("@DEBUG@ in find_packages(${ARGV})")
	_find_package(${ARGV})
endmacro()

all package are installed with a configuration file containing:

include(CMakeFindDependencyMacro)
foreach(_lib_ IN ITEMS @MY_REQUIRED_DEPENDENCIES@)
	find_dependency(${_lib_})
endforeach()

where MY_REQUIRED_DEPENDENCIES is a list of project names (namely B or C in this case).

First situation, C is required by B, I’ve got for B:

@DEBUG@ in find_packages(C;REQUIRED)

and for A

@DEBUG@ in find_packages(B;REQUIRED)
@DEBUG@ in find_packages(C;REQUIRED)

as expected
Second situation, C is NOT required by B, I’ve got for B:

@DEBUG@ in find_packages(C)

and for A

@DEBUG@ in find_packages(B;REQUIRED)
@DEBUG@ in find_packages(C;REQUIRED)

Which is unexpected. I thought I should get:

@DEBUG@ in find_packages(B;REQUIRED)
@DEBUG@ in find_packages(C)

What did I got wrong?

That is documented behaviour of find_dependency(). Quoting the docs:

It is designed to be used in a Package Configuration File (<PackageName>Config.cmake). find_dependency forwards the correct parameters for QUIET and REQUIRED which were passed to the original find_package() call.

Does it mean that if B is required, its dependencies, even optional ones, are getting required now?
It’s not suitable when the dependency between B and C is private, isn’t it?
So is there a way to keep the optional nature of a dependency?