diff --git a/src/gn/target.cc b/src/gn/target.cc
index e3c95f3..062beba 100644
--- a/src/gn/target.cc
+++ b/src/gn/target.cc
@@ -1313,6 +1313,14 @@
             return false;
         }
       }
+      for (const auto& dep : validations_) {
+        // If we haven't walked this dep yet, go down into it.
+        if (targets_walked->add(dep.ptr)) {
+          if (!dep.ptr->GetMetadata(keys_to_extract, keys_to_walk, rebase_dir,
+                                    false, result, targets_walked, err))
+            return false;
+        }
+      }
 
       // Any other walk keys are superfluous, as they can only be a subset of
       // all deps.
@@ -1345,6 +1353,22 @@
         break;
       }
     }
+    if (!found_next) {
+      for (const auto& dep : validations_) {
+        // Match against the label with the toolchain.
+        if (dep.label.GetUserVisibleName(true) == canonicalize_next_label) {
+          // If we haven't walked this dep yet, go down into it.
+          if (targets_walked->add(dep.ptr)) {
+            if (!dep.ptr->GetMetadata(keys_to_extract, keys_to_walk, rebase_dir,
+                                      false, result, targets_walked, err))
+              return false;
+          }
+          // We found it, so we can exit this search now.
+          found_next = true;
+          break;
+        }
+      }
+    }
     // If we didn't find the specified dep in the target, that's an error.
     // Propagate it back to the user.
     if (!found_next) {
diff --git a/src/gn/target_unittest.cc b/src/gn/target_unittest.cc
index ebe40be..b920c26 100644
--- a/src/gn/target_unittest.cc
+++ b/src/gn/target_unittest.cc
@@ -1538,3 +1538,31 @@
   ASSERT_EQ(1u, output.size());
   EXPECT_EQ("input.modulemap.pcm", output[0].value()) << output[0].value();
 }
+
+TEST(TargetTest, CollectMetadataWithValidation) {
+  TestWithScope setup;
+
+  TestTarget a(setup, "//foo:a", Target::SOURCE_SET);
+  Value a_expected(nullptr, Value::LIST);
+  a_expected.list_value().push_back(Value(nullptr, "foo"));
+  a.metadata().contents().emplace("walk", a_expected);
+
+  TestTarget b(setup, "//foo:b", Target::SOURCE_SET);
+  Value b_expected(nullptr, Value::LIST);
+  b_expected.list_value().push_back(Value(nullptr, "bar"));
+  b.metadata().contents().emplace("walk", b_expected);
+
+  a.validations().push_back(LabelTargetPair(&b));
+
+  std::vector<std::string> data_keys = {"walk"};
+  std::vector<std::string> walk_keys;
+  std::vector<Value> result;
+  TargetSet targets;
+  Err err;
+  a.GetMetadata(data_keys, walk_keys, SourceDir(), false, &result, &targets,
+                &err);
+  EXPECT_FALSE(err.has_error());
+
+  std::vector<Value> expected = {Value(nullptr, "bar"), Value(nullptr, "foo")};
+  EXPECT_EQ(result, expected);
+}
